diff options
| author | leonoverweel <l.overweel@gmail.com> | 2017-04-01 18:19:04 +0200 |
|---|---|---|
| committer | leonoverweel <l.overweel@gmail.com> | 2017-04-01 18:19:04 +0200 |
| commit | f240f3534e2db7d88242e05662fbedda1c2b4306 (patch) | |
| tree | a712186b252183d224fd8bd185de88a4654e6cfd | |
| parent | 7defb450529d6283bc357852f56ca76f7443dd8f (diff) | |
Map HTTP endpoint calls to API paths
| -rw-r--r-- | main.py | 10 | ||||
| -rw-r--r-- | opendc/util/path_parser.py | 27 |
2 files changed, 33 insertions, 4 deletions
@@ -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/<path:endpoint_path>') -def api_call(endpoint_path): +@FLASK_CORE_APP.route('/api/<string:version>/<path:endpoint_path>') +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 |
