diff options
Diffstat (limited to 'opendc/util')
| -rw-r--r-- | opendc/util/path_parser.py | 22 |
1 files changed, 18 insertions, 4 deletions
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) |
