From 26b34801ca54cbeca78c6807a14ed7822ebe9c3f Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 16:14:03 +0200 Subject: Add /api path to Flask app --- main.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 56f8e7c1..600aea92 100644 --- a/main.py +++ b/main.py @@ -102,6 +102,12 @@ def sign_in(): return jsonify(**data) +@FLASK_CORE_APP.route('/api/') +def api_call(endpoint_path): + """Call an API endpoint directly over HTTP""" + + return endpoint_path + @SOCKET_IO_CORE.on('request') def receive_message(message): """"Receive a SocketIO request""" @@ -149,4 +155,3 @@ def receive_message(message): SOCKET_IO_CORE.run(FLASK_CORE_APP, host='0.0.0.0', port=8081) - -- cgit v1.2.3 From 4a81d583245c78226414bd1341cf828dea09f87f Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 16:16:25 +0200 Subject: Only ignore config.json, not *.json --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e7a8a360..14b2f25e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ _mailinglist .tox .cache/ .idea/ -*.json +config.json -- cgit v1.2.3 From d0e30bfb5555f60082f0adda26d0f1136d823693 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 16:45:40 +0200 Subject: Add paths.json for API v1 --- opendc/api/v1/paths.json | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 opendc/api/v1/paths.json diff --git a/opendc/api/v1/paths.json b/opendc/api/v1/paths.json new file mode 100644 index 00000000..2f05a746 --- /dev/null +++ b/opendc/api/v1/paths.json @@ -0,0 +1,48 @@ +[ + "/room-types", + "/room-types/{name}", + "/room-types/{name}/allowed-objects", + "/schedulers", + "/simulations", + "/simulation/{simulationId}", + "/simulation/{simulationId}/authorizations", + "/simulation/{simulationId}/authorizations/{userId}", + "/simulation/{simulationId}/datacenters", + "/simulation/{simulationId}/datacenters/{datacenterId}", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines", + "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}", + "/simulation/{simulationId}/experiments/", + "/simulation/{simulationId}/experiments/{experimentId}", + "/simulation/{simulationId}/experiments/{experimentId}/last-simulated-tick", + "/simulation/{simulationId}/experiments/{experimentId}/machine-states", + "/simulation/{simulationId}/experiments/{experimentId}/rack-states", + "/simulation/{simulationId}/experiments/{experimentId}/room-states", + "/simulation/{simulationId}/experiments/{experimentId}/statistics", + "/simulation/{simulationId}/experiments/{experimentId}/task-states", + "/simulation/{simulationId}/paths/", + "/simulation/{simulationId}/paths/{pathId}", + "/simulation/{simulationId}/paths/{pathId}/branches", + "/simulation/{simulationId}/paths/{pathId}/sections", + "/simulation/{simulationId}/paths/{pathId}/sections/{sectionId}", + "/specifications/cpus", + "/specifications/cpus/{id}", + "/specifications/failure-models", + "/specifications/failure-models/{id}", + "/specifications/gpus", + "/specifications/gpus/{id}", + "/specifications/memories", + "/specifications/memories/{id}", + "/specifications/storages", + "/specifications/storages/{id}", + "/specifications/traces", + "/specifications/traces/{traceId}", + "/specifications/traces/{traceId}/tasks", + "/users", + "/users/{userId}", + "/users/{userId}/authorizations" +] \ No newline at end of file -- cgit v1.2.3 From 7defb450529d6283bc357852f56ca76f7443dd8f Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:18:08 +0200 Subject: Remove leading / from paths --- opendc/api/v1/paths.json | 92 ++++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/opendc/api/v1/paths.json b/opendc/api/v1/paths.json index 2f05a746..3b52dce0 100644 --- a/opendc/api/v1/paths.json +++ b/opendc/api/v1/paths.json @@ -1,48 +1,48 @@ [ - "/room-types", - "/room-types/{name}", - "/room-types/{name}/allowed-objects", - "/schedulers", - "/simulations", - "/simulation/{simulationId}", - "/simulation/{simulationId}/authorizations", - "/simulation/{simulationId}/authorizations/{userId}", - "/simulation/{simulationId}/datacenters", - "/simulation/{simulationId}/datacenters/{datacenterId}", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines", - "/simulation/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}", - "/simulation/{simulationId}/experiments/", - "/simulation/{simulationId}/experiments/{experimentId}", - "/simulation/{simulationId}/experiments/{experimentId}/last-simulated-tick", - "/simulation/{simulationId}/experiments/{experimentId}/machine-states", - "/simulation/{simulationId}/experiments/{experimentId}/rack-states", - "/simulation/{simulationId}/experiments/{experimentId}/room-states", - "/simulation/{simulationId}/experiments/{experimentId}/statistics", - "/simulation/{simulationId}/experiments/{experimentId}/task-states", - "/simulation/{simulationId}/paths/", - "/simulation/{simulationId}/paths/{pathId}", - "/simulation/{simulationId}/paths/{pathId}/branches", - "/simulation/{simulationId}/paths/{pathId}/sections", - "/simulation/{simulationId}/paths/{pathId}/sections/{sectionId}", - "/specifications/cpus", - "/specifications/cpus/{id}", - "/specifications/failure-models", - "/specifications/failure-models/{id}", - "/specifications/gpus", - "/specifications/gpus/{id}", - "/specifications/memories", - "/specifications/memories/{id}", - "/specifications/storages", - "/specifications/storages/{id}", - "/specifications/traces", - "/specifications/traces/{traceId}", - "/specifications/traces/{traceId}/tasks", - "/users", - "/users/{userId}", - "/users/{userId}/authorizations" + "room-types", + "room-types/{name}", + "room-types/{name}/allowed-objects", + "schedulers", + "simulations", + "simulations/{simulationId}", + "simulations/{simulationId}/authorizations", + "simulations/{simulationId}/authorizations/{userId}", + "simulations/{simulationId}/datacenters", + "simulations/{simulationId}/datacenters/{datacenterId}", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}", + "simulations/{simulationId}/experiments/", + "simulations/{simulationId}/experiments/{experimentId}", + "simulations/{simulationId}/experiments/{experimentId}/last-simulated-tick", + "simulations/{simulationId}/experiments/{experimentId}/machine-states", + "simulations/{simulationId}/experiments/{experimentId}/rack-states", + "simulations/{simulationId}/experiments/{experimentId}/room-states", + "simulations/{simulationId}/experiments/{experimentId}/statistics", + "simulations/{simulationId}/experiments/{experimentId}/task-states", + "simulations/{simulationId}/paths/", + "simulations/{simulationId}/paths/{pathId}", + "simulations/{simulationId}/paths/{pathId}/branches", + "simulations/{simulationId}/paths/{pathId}/sections", + "simulations/{simulationId}/paths/{pathId}/sections/{sectionId}", + "specifications/cpus", + "specifications/cpus/{id}", + "specifications/failure-models", + "specifications/failure-models/{id}", + "specifications/gpus", + "specifications/gpus/{id}", + "specifications/memories", + "specifications/memories/{id}", + "specifications/storages", + "specifications/storages/{id}", + "specifications/traces", + "specifications/traces/{traceId}", + "specifications/traces/{traceId}/tasks", + "users", + "users/{userId}", + "users/{userId}/authorizations" ] \ No newline at end of file -- cgit v1.2.3 From f240f3534e2db7d88242e05662fbedda1c2b4306 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:19:04 +0200 Subject: Map HTTP endpoint calls to API paths --- main.py | 10 ++++++---- opendc/util/path_parser.py | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 opendc/util/path_parser.py diff --git a/main.py b/main.py index 600aea92..404665b0 100644 --- a/main.py +++ b/main.py @@ -10,7 +10,7 @@ import flask_socketio from oauth2client import client, crypt from opendc.models.user import User -from opendc.util import exceptions, rest +from opendc.util import exceptions, rest, path_parser if len(sys.argv) < 2: print "config file path not given as argument" @@ -102,11 +102,13 @@ def sign_in(): return jsonify(**data) -@FLASK_CORE_APP.route('/api/') -def api_call(endpoint_path): +@FLASK_CORE_APP.route('/api//') +def api_call(version, endpoint_path): """Call an API endpoint directly over HTTP""" - return endpoint_path + path = path_parser.parse(version, endpoint_path) + + return jsonify(path) @SOCKET_IO_CORE.on('request') def receive_message(message): diff --git a/opendc/util/path_parser.py b/opendc/util/path_parser.py new file mode 100644 index 00000000..2bc4e002 --- /dev/null +++ b/opendc/util/path_parser.py @@ -0,0 +1,27 @@ +import json +import sys +import re + +def parse(version, endpoint_path): + """Map an HTTP call to an API path""" + + with open('opendc/api/{}/paths.json'.format(version)) as paths_file: + paths = json.load(paths_file) + + endpoint_path_parts = endpoint_path.split('/') + paths_parts = [x.split('/') for x in paths if len(x.split('/')) == len(endpoint_path_parts)] + + for path_parts in paths_parts: + found = True + + for (endpoint_part, part) in zip(endpoint_path_parts, path_parts): + print endpoint_part, part + if not part.startswith('{') and endpoint_part != part: + found = False + break + + if found: + sys.stdout.flush() + return '{}/{}'.format(version, '/'.join(path_parts)) + + return None -- cgit v1.2.3 From c5671ab2e5115ce9c022a97a088300dc408e2aa4 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:25:05 +0200 Subject: Make path parser robust to trailing / --- opendc/util/path_parser.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/opendc/util/path_parser.py b/opendc/util/path_parser.py index 2bc4e002..1bd19ee7 100644 --- a/opendc/util/path_parser.py +++ b/opendc/util/path_parser.py @@ -3,19 +3,18 @@ import sys import re def parse(version, endpoint_path): - """Map an HTTP call to an API path""" + """Map an HTTP endpoint path to an API path""" with open('opendc/api/{}/paths.json'.format(version)) as paths_file: paths = json.load(paths_file) - endpoint_path_parts = endpoint_path.split('/') + endpoint_path_parts = endpoint_path.strip('/').split('/') paths_parts = [x.split('/') for x in paths if len(x.split('/')) == len(endpoint_path_parts)] for path_parts in paths_parts: found = True for (endpoint_part, part) in zip(endpoint_path_parts, path_parts): - print endpoint_part, part if not part.startswith('{') and endpoint_part != part: found = False break -- cgit v1.2.3 From d4494f1da4f4f7fcd4a9550f2e09b633c4191260 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:31:22 +0200 Subject: Remove stdout flush from path_parser --- opendc/util/path_parser.py | 1 - 1 file changed, 1 deletion(-) diff --git a/opendc/util/path_parser.py b/opendc/util/path_parser.py index 1bd19ee7..0c2fb493 100644 --- a/opendc/util/path_parser.py +++ b/opendc/util/path_parser.py @@ -20,7 +20,6 @@ def parse(version, endpoint_path): break if found: - sys.stdout.flush() return '{}/{}'.format(version, '/'.join(path_parts)) return None -- cgit v1.2.3 From 0b3a3f4a62744fdc5b2f7282b0bcb8886f1eeacf Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:42:43 +0200 Subject: Add path parameter extraction --- main.py | 15 ++++++++++++--- opendc/util/path_parser.py | 22 ++++++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index 404665b0..1db07b41 100644 --- a/main.py +++ b/main.py @@ -106,9 +106,18 @@ def sign_in(): def api_call(version, endpoint_path): """Call an API endpoint directly over HTTP""" - path = path_parser.parse(version, endpoint_path) - - return jsonify(path) + (path, path_parameters) = path_parser.parse(version, endpoint_path) + + message = { + 'id': 0, + 'method': request.method, + 'path': path, + 'parameters': { + 'path': path_parameters + } + } + + return jsonify(message) @SOCKET_IO_CORE.on('request') def receive_message(message): diff --git a/opendc/util/path_parser.py b/opendc/util/path_parser.py index 0c2fb493..2f9528b1 100644 --- a/opendc/util/path_parser.py +++ b/opendc/util/path_parser.py @@ -5,21 +5,35 @@ import re def parse(version, endpoint_path): """Map an HTTP endpoint path to an API path""" + # Get possible paths with open('opendc/api/{}/paths.json'.format(version)) as paths_file: paths = json.load(paths_file) + # Find API path that matches endpoint_path endpoint_path_parts = endpoint_path.strip('/').split('/') paths_parts = [x.split('/') for x in paths if len(x.split('/')) == len(endpoint_path_parts)] + path = None for path_parts in paths_parts: found = True - for (endpoint_part, part) in zip(endpoint_path_parts, path_parts): if not part.startswith('{') and endpoint_part != part: found = False break - if found: - return '{}/{}'.format(version, '/'.join(path_parts)) + path = path_parts + + if path is None: + return None + + # Extract path parameters + parameters = {} + + for (name, value) in zip(path, endpoint_path_parts): + if name.startswith('{'): + try: + parameters[name.strip('{}')] = int(value) + except: + parameters[name.strip('{}')] = value - return None + return ('{}/{}'.format(version, '/'.join(path)), parameters) -- cgit v1.2.3 From 3cd761d8c4c803e67c5b72be0bd65b997b265a6a Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:49:54 +0200 Subject: Add query parameter parsing --- main.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 1db07b41..a8048312 100644 --- a/main.py +++ b/main.py @@ -108,13 +108,21 @@ def api_call(version, endpoint_path): (path, path_parameters) = path_parser.parse(version, endpoint_path) + query_parameters = request.args.to_dict() + for param in query_parameters: + try: + query_parameters[param] = int(query_parameters[param]) + except: + pass + message = { 'id': 0, 'method': request.method, - 'path': path, 'parameters': { - 'path': path_parameters - } + 'path': path_parameters, + 'query': query_parameters + }, + 'path': path } return jsonify(message) -- cgit v1.2.3 From 9102f76a9c86f858c4c663750f53241ed242eb9f Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 18:53:16 +0200 Subject: Fix /../task-durations path in paths.json --- opendc/api/v1/paths.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendc/api/v1/paths.json b/opendc/api/v1/paths.json index 3b52dce0..08908c25 100644 --- a/opendc/api/v1/paths.json +++ b/opendc/api/v1/paths.json @@ -22,7 +22,7 @@ "simulations/{simulationId}/experiments/{experimentId}/machine-states", "simulations/{simulationId}/experiments/{experimentId}/rack-states", "simulations/{simulationId}/experiments/{experimentId}/room-states", - "simulations/{simulationId}/experiments/{experimentId}/statistics", + "simulations/{simulationId}/experiments/{experimentId}/statistics/task-durations", "simulations/{simulationId}/experiments/{experimentId}/task-states", "simulations/{simulationId}/paths/", "simulations/{simulationId}/paths/{pathId}", -- cgit v1.2.3 From 4ab2280c7282944997a7d68414761399e5955e89 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 20:30:43 +0200 Subject: Allow GET, POST, PUT and DELETE for API calls --- main.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index a8048312..50ded468 100644 --- a/main.py +++ b/main.py @@ -102,10 +102,11 @@ def sign_in(): return jsonify(**data) -@FLASK_CORE_APP.route('/api//') +@FLASK_CORE_APP.route('/api//', methods = ['GET', 'POST', 'PUT', 'DELETE']) def api_call(version, endpoint_path): """Call an API endpoint directly over HTTP""" + # Get path and parameters (path, path_parameters) = path_parser.parse(version, endpoint_path) query_parameters = request.args.to_dict() @@ -114,7 +115,8 @@ def api_call(version, endpoint_path): query_parameters[param] = int(query_parameters[param]) except: pass - + + # Create and call request message = { 'id': 0, 'method': request.method, -- cgit v1.2.3 From 5b88d7f1af2ba3d3506fbb3c6319ccf3df0d4380 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 20:40:33 +0200 Subject: Add body parameter parsing --- main.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main.py b/main.py index 50ded468..203d0229 100644 --- a/main.py +++ b/main.py @@ -115,12 +115,15 @@ def api_call(version, endpoint_path): query_parameters[param] = int(query_parameters[param]) except: pass + + body_parameters = json.loads(request.get_data()) # Create and call request message = { 'id': 0, 'method': request.method, 'parameters': { + 'body': body_parameters, 'path': path_parameters, 'query': query_parameters }, -- cgit v1.2.3 From e6ced176b8bcfd4fb2aa9ca96cfe956d04067fe0 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 21:07:40 +0200 Subject: Pull message processing into method --- main.py | 56 ++++++++++++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/main.py b/main.py index 203d0229..d30dac64 100644 --- a/main.py +++ b/main.py @@ -136,46 +136,42 @@ def api_call(version, endpoint_path): def receive_message(message): """"Receive a SocketIO request""" - try: - request = rest.Request(message) - response = request.process() - - flask_socketio.emit('response', response.to_JSON(), json=True) + (request, response) = _process_message(message) - print 'Socket: {} to `/{}` resulted in {}: {}'.format( - request.method, - request.path, - response.status['code'], - response.status['description'] - ) + print 'Socket: {} to `/{}` resulted in {}: {}'.format( + request.method, + request.path, + response.status['code'], + response.status['description'] + ) + sys.stdout.flush() - return + flask_socketio.emit('response', response.to_JSON(), json=True) - except exceptions.AuthorizationTokenError as e: - response = rest.Response(401, 'Authorization error') - response.id = message['id'] +def _process_message(message): + """Process a request message and return the response.""" - flask_socketio.emit('response', response.to_JSON(), json=True) + try: + request = rest.Request(message) + response = request.process() + return (request, response) + + except exceptions.AuthorizationTokenError as e: + response = rest.Response(401, 'Authorization error') + except exceptions.RequestInitializationError as e: response = rest.Response(400, e.message) - response.id = message['id'] - - flask_socketio.emit('response', response.to_JSON(), json=True) + if not 'method' in message: + message['method'] = 'UNSPECIFIED' + if not 'path' in message: + message['path'] = 'UNSPECIFIED' + except Exception as e: response = rest.Response(500, 'Internal server error') - response.id = message['id'] - - flask_socketio.emit('response', response.to_JSON(), json=True) traceback.print_exc() - - print 'Socket: {} to `{}` resulted in {}: {}'.format( - message['method'], - message['path'], - response.status['code'], - response.status['description'] - ) - + + return ({'method': message['method'], 'path': message['path']}, response) SOCKET_IO_CORE.run(FLASK_CORE_APP, host='0.0.0.0', port=8081) -- cgit v1.2.3 From bb4a12a0cf9c412c57879229226762f06c3390e7 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 21:31:44 +0200 Subject: Process requests over HTTP --- main.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index d30dac64..1546a397 100644 --- a/main.py +++ b/main.py @@ -119,7 +119,7 @@ def api_call(version, endpoint_path): body_parameters = json.loads(request.get_data()) # Create and call request - message = { + (req, response) = _process_message({ 'id': 0, 'method': request.method, 'parameters': { @@ -127,10 +127,19 @@ def api_call(version, endpoint_path): 'path': path_parameters, 'query': query_parameters }, - 'path': path - } + 'path': path, + 'token': request.headers.get('auth-token') + }) + + print 'HTTP:\t{} to `/{}` resulted in {}: {}'.format( + req.method, + req.path, + response.status['code'], + response.status['description'] + ) + sys.stdout.flush() - return jsonify(message) + return jsonify(json.loads(response.to_JSON())) @SOCKET_IO_CORE.on('request') def receive_message(message): @@ -138,7 +147,7 @@ def receive_message(message): (request, response) = _process_message(message) - print 'Socket: {} to `/{}` resulted in {}: {}'.format( + print 'Socket:\t{} to `/{}` resulted in {}: {}'.format( request.method, request.path, response.status['code'], @@ -159,9 +168,11 @@ def _process_message(message): except exceptions.AuthorizationTokenError as e: response = rest.Response(401, 'Authorization error') - + response.id = message['id'] + except exceptions.RequestInitializationError as e: response = rest.Response(400, e.message) + response.id = message['id'] if not 'method' in message: message['method'] = 'UNSPECIFIED' @@ -170,6 +181,8 @@ def _process_message(message): except Exception as e: response = rest.Response(500, 'Internal server error') + if 'id' in message: + response.id = message['id'] traceback.print_exc() return ({'method': message['method'], 'path': message['path']}, response) -- cgit v1.2.3 From a06c408964dab6069b894c8fe11d09afdd7f9b81 Mon Sep 17 00:00:00 2001 From: leonoverweel Date: Sat, 1 Apr 2017 21:36:22 +0200 Subject: Replace web server test w/ auth token page --- main.py | 2 +- static/index.html | 32 ++++---------------------------- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/main.py b/main.py index 1546a397..d49e4191 100644 --- a/main.py +++ b/main.py @@ -55,7 +55,7 @@ def serve_projects(): return send_from_directory(STATIC_ROOT, 'projects.html') -@FLASK_CORE_APP.route('/web-server-test') +@FLASK_CORE_APP.route('/my-auth-token') def serve_web_server_test(): """Serve the web server test.""" diff --git a/static/index.html b/static/index.html index 744f7d27..3fc1c2d0 100644 --- a/static/index.html +++ b/static/index.html @@ -3,36 +3,9 @@ -