diff options
| author | leonoverweel <l.overweel@gmail.com> | 2017-04-01 18:42:43 +0200 |
|---|---|---|
| committer | leonoverweel <l.overweel@gmail.com> | 2017-04-01 18:42:43 +0200 |
| commit | 0b3a3f4a62744fdc5b2f7282b0bcb8886f1eeacf (patch) | |
| tree | c3441b6040dced85b9a2e20eb0e96d0b8c4d20d2 | |
| parent | d4494f1da4f4f7fcd4a9550f2e09b633c4191260 (diff) | |
Add path parameter extraction
| -rw-r--r-- | main.py | 15 | ||||
| -rw-r--r-- | opendc/util/path_parser.py | 22 |
2 files changed, 30 insertions, 7 deletions
@@ -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) |
