summaryrefslogtreecommitdiff
path: root/opendc/api/v2/paths/pathId
diff options
context:
space:
mode:
authorGeorgios Andreadis <info@gandreadis.com>2020-06-25 17:11:03 +0200
committerGeorgios Andreadis <info@gandreadis.com>2020-06-25 17:11:03 +0200
commitc0bf71322e4fd510046588e388ada0a81f54631d (patch)
tree7f0af5b0657558a4730b62298534cd6a1d829765 /opendc/api/v2/paths/pathId
parentcae7ee8ab4639963d3da7fef6f078a6078340a0b (diff)
Implement and test path
Diffstat (limited to 'opendc/api/v2/paths/pathId')
-rw-r--r--opendc/api/v2/paths/pathId/__init__.py0
-rw-r--r--opendc/api/v2/paths/pathId/branches/__init__.py0
-rw-r--r--opendc/api/v2/paths/pathId/branches/endpoint.py155
-rw-r--r--opendc/api/v2/paths/pathId/endpoint.py35
-rw-r--r--opendc/api/v2/paths/pathId/sections/__init__.py0
-rw-r--r--opendc/api/v2/paths/pathId/sections/endpoint.py35
6 files changed, 0 insertions, 225 deletions
diff --git a/opendc/api/v2/paths/pathId/__init__.py b/opendc/api/v2/paths/pathId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/opendc/api/v2/paths/pathId/__init__.py
+++ /dev/null
diff --git a/opendc/api/v2/paths/pathId/branches/__init__.py b/opendc/api/v2/paths/pathId/branches/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/opendc/api/v2/paths/pathId/branches/__init__.py
+++ /dev/null
diff --git a/opendc/api/v2/paths/pathId/branches/endpoint.py b/opendc/api/v2/paths/pathId/branches/endpoint.py
deleted file mode 100644
index 6b0eebbd..00000000
--- a/opendc/api/v2/paths/pathId/branches/endpoint.py
+++ /dev/null
@@ -1,155 +0,0 @@
-from datetime import datetime
-
-from opendc.models_old.datacenter import Datacenter
-from opendc.models_old.machine import Machine
-from opendc.models_old.object import Object
-from opendc.models_old.path import Path
-from opendc.models_old.rack import Rack
-from opendc.models_old.room import Room
-from opendc.models_old.section import Section
-from opendc.models_old.tile import Tile
-from opendc.util import database, exceptions
-from opendc.util.rest import Request, Response
-
-
-def POST(request):
- """Create a new Path that branches off of this Path at the specified tick."""
-
- # Make sure required parameters are there
-
- try:
- request.check_required_parameters(path={'pathId': 'int'}, body={'section': {'startTick': 'int'}})
-
- except exceptions.ParameterError as e:
- return Response(400, str(e))
-
- # Instantiate the current Path from the database
-
- current_path = Path.from_primary_key((request.params_path['pathId'], ))
-
- # Make sure the current Path exists
-
- if not current_path.exists():
- return Response(404, '{} not found.'.format(current_path))
-
- # Make sure this user is authorized to branch off the current Path
-
- if not current_path.google_id_has_at_least(request.google_id, 'EDIT'):
- return Response(403, 'Forbidden from branching off {}.'.format(current_path))
-
- # Create the new Path
-
- new_path = Path(simulation_id=current_path.simulation_id,
- datetime_created=database.datetime_to_string(datetime.now()))
-
- new_path.insert()
-
- # Get the current Path's sections and add them to the new Path if they're before the branch
-
- current_sections = Section.query('path_id', current_path.id)
- last_section = None
-
- for current_section in current_sections:
-
- if current_section.start_tick < request.params_body['section']['startTick'] or current_section.start_tick == 0:
- new_section = Section(path_id=new_path.id,
- datacenter_id=current_section.datacenter_id,
- start_tick=current_section.start_tick)
-
- new_section.insert()
-
- last_section = current_section
-
- # Make a deep copy of the last section's datacenter, its rooms, their tiles, etc.
-
- path_parameters = {'simulationId': new_path.simulation_id}
-
- # Copy the Datacenter
-
- old_datacenter = Datacenter.from_primary_key((last_section.datacenter_id, ))
-
- message = old_datacenter.generate_api_call(path_parameters, request.token)
- response = Request(message).process()
-
- path_parameters['datacenterId'] = response.content['id']
-
- # Create the new last Section, with the IDs of the new Path and new Datacenter
-
- if last_section.start_tick != 0:
- new_section = Section(path_id=new_path.id,
- datacenter_id=path_parameters['datacenterId'],
- start_tick=request.params_body['section']['startTick'])
-
- new_section.insert()
-
- else:
- last_section.datacenter_id = path_parameters['datacenterId']
- last_section.update()
-
- # Copy the rest of the Datacenter, starting with the Rooms...
-
- old_rooms = Room.query('datacenter_id', old_datacenter.id)
-
- for old_room in old_rooms:
-
- old_room.datacenter_id = path_parameters['datacenterId']
-
- if old_room.topology_id is None:
- old_room.topology_id = old_room.id
-
- message = old_room.generate_api_call(path_parameters, request.token)
- response = Request(message).process()
-
- path_parameters['roomId'] = response.content['id']
-
- # ... then the Tiles, ...
-
- old_tiles = Tile.query('room_id', old_room.id)
-
- for old_tile in old_tiles:
-
- old_tile.room_id = path_parameters['roomId']
-
- if old_tile.topology_id is None:
- old_tile.topology_id = old_tile.id
-
- message = old_tile.generate_api_call(path_parameters, request.token)
- response = Request(message).process()
-
- path_parameters['tileId'] = response.content['id']
-
- old_objects = Object.query('id', old_tile.object_id)
-
- # ... then the Tile's Rack, ...
-
- if len(old_objects) == 1 and old_objects[0].type == 'RACK':
-
- old_rack = Rack.query('id', old_objects[0].id)[0]
-
- if old_rack.topology_id is None:
- old_rack.topology_id = old_rack.id
-
- message = old_rack.generate_api_call(path_parameters, request.token)
- response = Request(message).process()
-
- path_parameters['rackId'] = response.content['id']
-
- # ... then the Rack's Machines ...
-
- old_machines = Machine.query('rack_id', old_rack.id)
-
- for old_machine in old_machines:
- old_machine.read()
- old_machine.rack_id = path_parameters['rackId']
-
- if old_machine.topology_id is None:
- old_machine.topology_id = old_machine.id
-
- message = old_machine.generate_api_call(path_parameters, request.token)
- response = Request(message).process()
-
- path_parameters['machineId'] = response.content['id']
-
- # Return the new Path
-
- return Response(200, 'Successfully created {}.'.format(new_path), new_path.to_JSON())
diff --git a/opendc/api/v2/paths/pathId/endpoint.py b/opendc/api/v2/paths/pathId/endpoint.py
deleted file mode 100644
index a3348618..00000000
--- a/opendc/api/v2/paths/pathId/endpoint.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from opendc.models_old.path import Path
-from opendc.util import exceptions
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Path."""
-
- # Make sure required parameters are there
-
- try:
- request.check_required_parameters(path={'pathId': 'int'})
-
- except exceptions.ParameterError as e:
- return Response(400, str(e))
-
- # Instantiate a Path from the database
-
- path = Path.from_primary_key((request.params_path['pathId'], ))
-
- # Make sure this Path exists
-
- if not path.exists():
- return Response(404, '{} not found.'.format(path))
-
- # Make sure this user is authorized to view this Path
-
- if not path.google_id_has_at_least(request.google_id, 'VIEW'):
- return Response(403, 'Forbidden from retrieving {}.'.format(path))
-
- # Return this Path
-
- path.read()
-
- return Response(200, 'Successfully retrieved {}.'.format(path), path.to_JSON())
diff --git a/opendc/api/v2/paths/pathId/sections/__init__.py b/opendc/api/v2/paths/pathId/sections/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/opendc/api/v2/paths/pathId/sections/__init__.py
+++ /dev/null
diff --git a/opendc/api/v2/paths/pathId/sections/endpoint.py b/opendc/api/v2/paths/pathId/sections/endpoint.py
deleted file mode 100644
index 8f3e270b..00000000
--- a/opendc/api/v2/paths/pathId/sections/endpoint.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from opendc.models_old.path import Path
-from opendc.models_old.section import Section
-from opendc.util import exceptions
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Path's Sections."""
-
- # Make sure required parameters are there
-
- try:
- request.check_required_parameters(path={'pathId': 'int'})
- except exceptions.ParameterError as e:
- return Response(400, str(e))
-
- # Instantiate a Path from the database
-
- path = Path.from_primary_key((request.params_path['pathId'], ))
-
- # Make sure this Path exists
-
- if not path.exists():
- return Response(404, '{} not found.'.format(path))
-
- # Make sure this user is authorized to view this Path's Sections
-
- if not path.google_id_has_at_least(request.google_id, 'VIEW'):
- return Response(403, 'Forbidden from viewing Sections for {}.'.format(path))
-
- # Get and return the Sections
-
- sections = Section.query('path_id', request.params_path['pathId'])
-
- return Response(200, 'Successfully retrieved Sections for {}.'.format(path), [x.to_JSON() for x in sections])