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