diff --git a/client.py b/client.py index 96b1410..5105c99 100644 --- a/client.py +++ b/client.py @@ -1,12 +1,21 @@ +#!/home/raphael/.pyenv/shims/python +from urllib.parse import urlencode,urlunsplit import argparse import requests if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('host',default = "localhost:5138",nargs='?') - parser.add_argument('action',choices = ['on','off','toggle','kill']) + parser.add_argument('action',choices = ['on','off','toggle','kill','set']) + parser.add_argument('additional',nargs = '*') args = parser.parse_args() - r = requests.post('http://{host}?action={action}'.format(**args.__dict__)) + params = {'action':args.action} + + for addition in args.additional: + key,val = addition.split('=') + params[key] = val + url = urlunsplit(('http',args.host,'',urlencode(params),'')) + r = requests.post(url) if r.status_code == 204: print('server killed') else: - print(r.text) \ No newline at end of file + print(r.text) diff --git a/server.py b/server.py index 903e63f..3a78892 100644 --- a/server.py +++ b/server.py @@ -30,6 +30,27 @@ class handler(server.BaseHTTPRequestHandler): 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) else: self.send_response(400) self.end_headers() @@ -60,4 +81,4 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-p','--port',type=int,default=5138) args = parser.parse_args() - start_server('localhost',args.port) \ No newline at end of file + start_server('localhost',args.port)