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 /opendc | |
| parent | d4494f1da4f4f7fcd4a9550f2e09b633c4191260 (diff) | |
Add path parameter extraction
Diffstat (limited to 'opendc')
| -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) |
