summaryrefslogtreecommitdiff
path: root/opendc
diff options
context:
space:
mode:
authorleonoverweel <l.overweel@gmail.com>2017-04-01 18:42:43 +0200
committerleonoverweel <l.overweel@gmail.com>2017-04-01 18:42:43 +0200
commit0b3a3f4a62744fdc5b2f7282b0bcb8886f1eeacf (patch)
treec3441b6040dced85b9a2e20eb0e96d0b8c4d20d2 /opendc
parentd4494f1da4f4f7fcd4a9550f2e09b633c4191260 (diff)
Add path parameter extraction
Diffstat (limited to 'opendc')
-rw-r--r--opendc/util/path_parser.py22
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)