aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
Diffstat (limited to 'klippy')
-rw-r--r--klippy/webhooks.py47
1 files changed, 26 insertions, 21 deletions
diff --git a/klippy/webhooks.py b/klippy/webhooks.py
index 9a6fd16e..78401eda 100644
--- a/klippy/webhooks.py
+++ b/klippy/webhooks.py
@@ -45,22 +45,24 @@ class Sentinel:
class WebRequest:
error = WebRequestError
- def __init__(self, client_conn, base_request):
+ def __init__(self, client_conn, request):
self.client_conn = client_conn
- self.id = base_request['id']
- self.path = base_request['path']
- self.args = base_request['args']
+ base_request = json_loads_byteified(request)
+ self.id = base_request.get('id', None)
+ self.method = base_request['method']
+ self.params = base_request.get('params', {})
self.response = None
+ self.is_error = False
def get_client_connection(self):
return self.client_conn
def get(self, item, default=Sentinel):
- if item not in self.args:
+ if item not in self.params:
if default == Sentinel:
raise WebRequestError("Invalid Argument [%s]" % item)
return default
- return self.args[item]
+ return self.params[item]
def get_int(self, item):
return int(self.get(item))
@@ -68,13 +70,11 @@ class WebRequest:
def get_float(self, item):
return float(self.get(item))
- def get_args(self):
- return self.args
-
- def get_path(self):
- return self.path
+ def get_method(self):
+ return self.method
def set_error(self, error):
+ self.is_error = True
self.response = error.to_dict()
def send(self, data):
@@ -83,11 +83,16 @@ class WebRequest:
self.response = data
def finish(self):
+ if self.id is None:
+ return None
+ rtype = "result"
+ if self.is_error:
+ rtype = "error"
if self.response is None:
# No error was set and the user never executed
- # send, default response is "ok"
- self.response = "ok"
- return {"request_id": self.id, "response": self.response}
+ # send, default response is {}
+ self.response = {}
+ return {"id": self.id, rtype: self.response}
class ServerSocket:
def __init__(self, webhooks, printer):
@@ -194,7 +199,7 @@ class ClientConnection:
logging.debug(
"webhooks: Request received: %s" % (req))
try:
- web_request = WebRequest(self, json_loads_byteified(req))
+ web_request = WebRequest(self, req)
except Exception:
logging.exception(
"webhooks: Error decoding Server Request %s"
@@ -205,20 +210,20 @@ class ClientConnection:
def _process_request(self, web_request):
try:
- func = self.webhooks.get_callback(
- web_request.get_path())
+ func = self.webhooks.get_callback(web_request.get_method())
func(web_request)
except homing.CommandError as e:
web_request.set_error(WebRequestError(e.message))
except Exception as e:
- msg = "Internal Error on WebRequest: %s" % (web_request.get_path())
+ msg = ("Internal Error on WebRequest: %s"
+ % (web_request.get_method()))
logging.exception(msg)
web_request.set_error(WebRequestError(e.message))
self.printer.invoke_shutdown(msg)
result = web_request.finish()
- logging.debug(
- "webhooks: Sending response - %s" % (str(result)))
- self.send({'method': "response", 'params': result})
+ if result is None:
+ return
+ self.send(result)
def send(self, data):
self.send_buffer += json.dumps(data) + "\x03"