summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleonoverweel <l.overweel@gmail.com>2017-04-01 18:19:04 +0200
committerleonoverweel <l.overweel@gmail.com>2017-04-01 18:19:04 +0200
commitf240f3534e2db7d88242e05662fbedda1c2b4306 (patch)
treea712186b252183d224fd8bd185de88a4654e6cfd
parent7defb450529d6283bc357852f56ca76f7443dd8f (diff)
Map HTTP endpoint calls to API paths
-rw-r--r--main.py10
-rw-r--r--opendc/util/path_parser.py27
2 files changed, 33 insertions, 4 deletions
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/<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