from clicker_control import clicker_manager from http import server from threading import Thread from urllib.parse import urlparse,parse_qs import argparse import json class handler(server.BaseHTTPRequestHandler): def do_POST(self): params = parse_qs(urlparse(self.path).query) action = params['action'][0] print(action) ret = {} 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 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)