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 | |
| parent | 59b05ac8425e34cdf41179506cdda357c59b4b12 (diff) | |
| parent | fd0376c5a8f018457a11bb0f9602bda366571955 (diff) | |
Merge pull request #6 from atlarge-research/api-over-http
Access API over HTTP
Diffstat (limited to 'opendc')
| -rw-r--r-- | opendc/api/v1/paths.json | 48 | ||||
| -rw-r--r-- | opendc/api/v1/users/endpoint.py | 2 | ||||
| -rw-r--r-- | opendc/util/path_parser.py | 39 | ||||
| -rw-r--r-- | opendc/util/rest.py | 5 |
4 files changed, 92 insertions, 2 deletions
diff --git a/opendc/api/v1/paths.json b/opendc/api/v1/paths.json new file mode 100644 index 00000000..08908c25 --- /dev/null +++ b/opendc/api/v1/paths.json @@ -0,0 +1,48 @@ +[ + "room-types", + "room-types/{name}", + "room-types/{name}/allowed-objects", + "schedulers", + "simulations", + "simulations/{simulationId}", + "simulations/{simulationId}/authorizations", + "simulations/{simulationId}/authorizations/{userId}", + "simulations/{simulationId}/datacenters", + "simulations/{simulationId}/datacenters/{datacenterId}", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines", + "simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}", + "simulations/{simulationId}/experiments/", + "simulations/{simulationId}/experiments/{experimentId}", + "simulations/{simulationId}/experiments/{experimentId}/last-simulated-tick", + "simulations/{simulationId}/experiments/{experimentId}/machine-states", + "simulations/{simulationId}/experiments/{experimentId}/rack-states", + "simulations/{simulationId}/experiments/{experimentId}/room-states", + "simulations/{simulationId}/experiments/{experimentId}/statistics/task-durations", + "simulations/{simulationId}/experiments/{experimentId}/task-states", + "simulations/{simulationId}/paths/", + "simulations/{simulationId}/paths/{pathId}", + "simulations/{simulationId}/paths/{pathId}/branches", + "simulations/{simulationId}/paths/{pathId}/sections", + "simulations/{simulationId}/paths/{pathId}/sections/{sectionId}", + "specifications/cpus", + "specifications/cpus/{id}", + "specifications/failure-models", + "specifications/failure-models/{id}", + "specifications/gpus", + "specifications/gpus/{id}", + "specifications/memories", + "specifications/memories/{id}", + "specifications/storages", + "specifications/storages/{id}", + "specifications/traces", + "specifications/traces/{traceId}", + "specifications/traces/{traceId}/tasks", + "users", + "users/{userId}", + "users/{userId}/authorizations" +]
\ No newline at end of file diff --git a/opendc/api/v1/users/endpoint.py b/opendc/api/v1/users/endpoint.py index 1f43f665..7e381ed5 100644 --- a/opendc/api/v1/users/endpoint.py +++ b/opendc/api/v1/users/endpoint.py @@ -43,7 +43,6 @@ def POST(request): request.check_required_parameters( body = { 'user': { - 'googleId': 'string', 'email': 'string' } } @@ -54,6 +53,7 @@ def POST(request): # Instantiate a User + request.params_body['user']['googleId'] = request.google_id user = User.from_JSON(request.params_body['user']) # Make sure a User with this Google ID does not already exist 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) diff --git a/opendc/util/rest.py b/opendc/util/rest.py index 65747762..ad53f084 100644 --- a/opendc/util/rest.py +++ b/opendc/util/rest.py @@ -13,11 +13,14 @@ with open(sys.argv[1]) as file: class Request(object): """WebSocket message to REST request mapping.""" - def __init__(self, message): + def __init__(self, message=None): """"Initialize a Request from a socket message.""" # Get the Request parameters from the message + if message is None: + return + try: self.message = message |
