You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
from clicker_control import clicker_manager,CLICKER_PATHfrom http import serverfrom threading import Threadfrom urllib.parse import urlparse,parse_qsimport argparseimport jsonimport os
class handler(server.BaseHTTPRequestHandler):
def do_GET(self): params = parse_qs(urlparse(self.path).query) ret = {} self.server.manager.update() if params['q'][0] == 'status': ret['status'] = 'on' if self.server.manager.on else 'off' self.send_response(200) self.end_headers() resp = json.dumps(ret).encode() self.wfile.write(resp) return
def do_POST(self): params = parse_qs(urlparse(self.path).query) action = params['action'][0] print(action) ret = {} self.server.manager.update() if action == 'on': self.server.manager.turn_on() ret['status'] = 'on' elif action == 'off': self.server.manager.turn_off() ret['status'] = 'off' elif action == 'toggle': self.server.manager.toggle() if self.server.manager.on: ret['status'] = 'on' else: ret['status'] = 'off' elif action == 'kill': self.server.manager.kill() self.send_response(204) self.end_headers() print('server being killed') self.server.serve = False return elif action == 'set': try: state = params['state'][0] assert(state in ('on','off')) self.server.manager.on = state == 'on' resp='Toggle state set to {}'.format(state).encode() self.send_response(201) self.end_headers() self.wfile.write(resp) return except AssertionError: self.send_response(400) self.end_headers() resp = "State must either be `on` or `off`".encode() self.wfile.write(resp) return except KeyError: self.send_response(400) self.end_headers() resp = "No state specified".encode() self.wfile.write(resp) return else: self.send_response(400) self.end_headers() resp = "Action not recognized".encode() self.wfile.write(resp) return self.send_response(201) self.end_headers() resp = json.dumps(ret).encode() self.wfile.write(resp)
class clicker_server(server.HTTPServer): def __init__(self,location): self.manager = clicker_manager() self.serve = True super().__init__(location,handler)
def serve_forever(self): while self.serve: self.handle_request() self.socket.close()
def start_server(hostname,port): httpd = clicker_server((hostname,args.port)) httpd.serve_forever()
if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-p','--port',type=int,default=5138) args = parser.parse_args() start_server('localhost',args.port)
|