diff options
| author | Sacheendra talluri <sacheendra.t@gmail.com> | 2017-04-04 15:34:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-04 15:34:01 +0200 |
| commit | 693a23d17c8783e51a97fd5a2439b5d1ceaa003c (patch) | |
| tree | fdad42c44a147e03101925ffd4d62a869bac4490 /opendc/util/path_parser.py | |
| parent | 59b05ac8425e34cdf41179506cdda357c59b4b12 (diff) | |
| parent | fd0376c5a8f018457a11bb0f9602bda366571955 (diff) | |
Merge pull request #6 from atlarge-research/api-over-http
Access API over HTTP
Diffstat (limited to 'opendc/util/path_parser.py')
| -rw-r--r-- | opendc/util/path_parser.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/opendc/util/path_parser.py b/opendc/util/path_parser.py new file mode 100644 index 00000000..2f9528b1 --- /dev/null +++ b/opendc/util/path_parser.py @@ -0,0 +1,39 @@ +import json +import sys +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: + 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 ('{}/{}'.format(version, '/'.join(path)), parameters) |
