summaryrefslogtreecommitdiff
path: root/web-server/opendc/api
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-07-14 21:10:56 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-08-24 19:48:04 +0200
commit02997b2522b9c66072b16f1425c02e81e0085e3c (patch)
treeeb8cb533e3ef37a11598e86736b063293f8b0e2b /web-server/opendc/api
parent1a4776636bf6b585d4a19a6721d9d57b02c88ca4 (diff)
Rename web-server to API
This change renames the web-server component to API in order to be more descriptive of its role. The OpenDC API bridges between the frontend on one side and the database and simulator on the other side.
Diffstat (limited to 'web-server/opendc/api')
-rw-r--r--web-server/opendc/api/__init__.py0
-rw-r--r--web-server/opendc/api/v2/__init__.py0
-rw-r--r--web-server/opendc/api/v2/paths.json18
-rw-r--r--web-server/opendc/api/v2/portfolios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py65
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py43
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py119
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py149
-rw-r--r--web-server/opendc/api/v2/prefabs/__init__.py0
-rw-r--r--web-server/opendc/api/v2/prefabs/endpoint.py23
-rw-r--r--web-server/opendc/api/v2/prefabs/prefabId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/prefabs/prefabId/endpoint.py53
-rw-r--r--web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py140
-rw-r--r--web-server/opendc/api/v2/prefabs/test_endpoint.py22
-rw-r--r--web-server/opendc/api/v2/projects/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/endpoint.py32
-rw-r--r--web-server/opendc/api/v2/projects/projectId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py17
-rw-r--r--web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py40
-rw-r--r--web-server/opendc/api/v2/projects/projectId/endpoint.py66
-rw-r--r--web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py35
-rw-r--r--web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py83
-rw-r--r--web-server/opendc/api/v2/projects/projectId/test_endpoint.py119
-rw-r--r--web-server/opendc/api/v2/projects/projectId/topologies/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py31
-rw-r--r--web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py50
-rw-r--r--web-server/opendc/api/v2/projects/test_endpoint.py23
-rw-r--r--web-server/opendc/api/v2/scenarios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/scenarios/scenarioId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py57
-rw-r--r--web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py140
-rw-r--r--web-server/opendc/api/v2/schedulers/__init__.py0
-rw-r--r--web-server/opendc/api/v2/schedulers/endpoint.py9
-rw-r--r--web-server/opendc/api/v2/schedulers/test_endpoint.py2
-rw-r--r--web-server/opendc/api/v2/topologies/__init__.py0
-rw-r--r--web-server/opendc/api/v2/topologies/topologyId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/topologies/topologyId/endpoint.py56
-rw-r--r--web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py116
-rw-r--r--web-server/opendc/api/v2/traces/__init__.py0
-rw-r--r--web-server/opendc/api/v2/traces/endpoint.py10
-rw-r--r--web-server/opendc/api/v2/traces/test_endpoint.py6
-rw-r--r--web-server/opendc/api/v2/traces/traceId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/traces/traceId/endpoint.py14
-rw-r--r--web-server/opendc/api/v2/traces/traceId/test_endpoint.py13
-rw-r--r--web-server/opendc/api/v2/users/__init__.py0
-rw-r--r--web-server/opendc/api/v2/users/endpoint.py30
-rw-r--r--web-server/opendc/api/v2/users/test_endpoint.py34
-rw-r--r--web-server/opendc/api/v2/users/userId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/users/userId/endpoint.py59
-rw-r--r--web-server/opendc/api/v2/users/userId/test_endpoint.py53
54 files changed, 0 insertions, 1727 deletions
diff --git a/web-server/opendc/api/__init__.py b/web-server/opendc/api/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/__init__.py b/web-server/opendc/api/v2/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/paths.json b/web-server/opendc/api/v2/paths.json
deleted file mode 100644
index 90d5a2e6..00000000
--- a/web-server/opendc/api/v2/paths.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- "/users",
- "/users/{userId}",
- "/projects",
- "/projects/{projectId}",
- "/projects/{projectId}/authorizations",
- "/projects/{projectId}/topologies",
- "/projects/{projectId}/portfolios",
- "/topologies/{topologyId}",
- "/portfolios/{portfolioId}",
- "/portfolios/{portfolioId}/scenarios",
- "/scenarios/{scenarioId}",
- "/schedulers",
- "/traces",
- "/traces/{traceId}",
- "/prefabs",
- "/prefabs/{prefabId}"
-]
diff --git a/web-server/opendc/api/v2/portfolios/__init__.py b/web-server/opendc/api/v2/portfolios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/portfolios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py b/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py
deleted file mode 100644
index c0ca64e0..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from opendc.models.portfolio import Portfolio
-from opendc.models.project import Project
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'})
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved portfolio.', portfolio.obj)
-
-
-def PUT(request):
- """Update this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'}, body={'portfolio': {
- 'name': 'string',
- 'targets': {
- 'enabledMetrics': 'list',
- 'repeatsPerScenario': 'int',
- },
- }})
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, True)
-
- portfolio.set_property('name',
- request.params_body['portfolio']['name'])
- portfolio.set_property('targets.enabledMetrics',
- request.params_body['portfolio']['targets']['enabledMetrics'])
- portfolio.set_property('targets.repeatsPerScenario',
- request.params_body['portfolio']['targets']['repeatsPerScenario'])
-
- portfolio.update()
-
- return Response(200, 'Successfully updated portfolio.', portfolio.obj)
-
-
-def DELETE(request):
- """Delete this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'})
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, True)
-
- project = Project.from_id(portfolio.obj['projectId'])
- project.check_exists()
- if request.params_path['portfolioId'] in project.obj['portfolioIds']:
- project.obj['portfolioIds'].remove(request.params_path['portfolioId'])
- project.update()
-
- old_object = portfolio.delete()
-
- return Response(200, 'Successfully deleted portfolio.', old_object)
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py
deleted file mode 100644
index 1c5e0ab6..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from opendc.models.portfolio import Portfolio
-from opendc.models.scenario import Scenario
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Add a new Scenario for this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'},
- body={
- 'scenario': {
- 'name': 'string',
- 'trace': {
- 'traceId': 'string',
- 'loadSamplingFraction': 'float',
- },
- 'topology': {
- 'topologyId': 'string',
- },
- 'operational': {
- 'failuresEnabled': 'bool',
- 'performanceInterferenceEnabled': 'bool',
- 'schedulerName': 'string',
- },
- }
- })
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, True)
-
- scenario = Scenario(request.params_body['scenario'])
-
- scenario.set_property('portfolioId', request.params_path['portfolioId'])
- scenario.set_property('simulationState', 'QUEUED')
-
- scenario.insert()
-
- portfolio.obj['scenarioIds'].append(scenario.get_id())
- portfolio.update()
-
- return Response(200, 'Successfully added Scenario.', scenario.obj)
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py
deleted file mode 100644
index 8b55bab0..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_scenario_missing_parameter(client):
- assert '400' in client.post('/api/v2/portfolios/1/scenarios').status
-
-
-def test_add_scenario_non_existing_portfolio(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.post('/api/v2/portfolios/1/scenarios',
- json={
- 'scenario': {
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- }
- }).status
-
-
-def test_add_scenario_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'portfolioId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- assert '403' in client.post('/api/v2/portfolios/1/scenarios',
- json={
- 'scenario': {
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- }
- }).status
-
-
-def test_add_scenario(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'portfolioId': '1',
- 'portfolioIds': ['1'],
- 'scenarioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }],
- 'simulationState': 'QUEUED',
- })
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- 'portfolioId': '1',
- 'simulationState': 'QUEUED',
- })
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.post(
- '/api/v2/portfolios/1/scenarios',
- json={
- 'scenario': {
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- }
- })
- assert 'portfolioId' in res.json['content']
- assert 'simulationState' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py
deleted file mode 100644
index 7ac346d4..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_portfolio_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/portfolios/1').status
-
-
-def test_get_portfolio_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'projectId': '1', 'authorizations': []})
- res = client.get('/api/v2/portfolios/1')
- assert '403' in res.status
-
-
-def test_get_portfolio_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'projectId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/portfolios/1')
- assert '403' in res.status
-
-
-def test_get_portfolio(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'projectId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/portfolios/1')
- assert '200' in res.status
-
-
-def test_update_portfolio_missing_parameter(client):
- assert '400' in client.put('/api/v2/portfolios/1').status
-
-
-def test_update_portfolio_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/portfolios/1', json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_update_portfolio_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/portfolios/1', json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_update_portfolio(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'targets': {
- 'enabledMetrics': [],
- 'repeatsPerScenario': 1
- }
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- res = client.put('/api/v2/portfolios/1', json={'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }})
- assert '200' in res.status
-
-
-def test_delete_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/portfolios/1').status
-
-
-def test_delete_project_different_user(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'googleId': 'other_test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/portfolios/1').status
-
-
-def test_delete_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'googleId': 'test',
- 'portfolioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value={})
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.delete('/api/v2/portfolios/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/prefabs/__init__.py b/web-server/opendc/api/v2/prefabs/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/prefabs/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/prefabs/endpoint.py b/web-server/opendc/api/v2/prefabs/endpoint.py
deleted file mode 100644
index 723a2f0d..00000000
--- a/web-server/opendc/api/v2/prefabs/endpoint.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from datetime import datetime
-
-from opendc.models.prefab import Prefab
-from opendc.models.user import User
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Create a new prefab, and return that new prefab."""
-
- request.check_required_parameters(body={'prefab': {'name': 'string'}})
-
- prefab = Prefab(request.params_body['prefab'])
- prefab.set_property('datetimeCreated', Database.datetime_to_string(datetime.now()))
- prefab.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
-
- user = User.from_google_id(request.google_id)
- prefab.set_property('authorId', user.get_id())
-
- prefab.insert()
-
- return Response(200, 'Successfully created prefab.', prefab.obj)
diff --git a/web-server/opendc/api/v2/prefabs/prefabId/__init__.py b/web-server/opendc/api/v2/prefabs/prefabId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/prefabs/prefabId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/prefabs/prefabId/endpoint.py b/web-server/opendc/api/v2/prefabs/prefabId/endpoint.py
deleted file mode 100644
index e8508ee0..00000000
--- a/web-server/opendc/api/v2/prefabs/prefabId/endpoint.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from datetime import datetime
-
-from opendc.models.prefab import Prefab
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Prefab."""
-
- request.check_required_parameters(path={'prefabId': 'string'})
-
- prefab = Prefab.from_id(request.params_path['prefabId'])
- print(prefab.obj)
- prefab.check_exists()
- print("before cua")
- prefab.check_user_access(request.google_id)
- print("after cua")
-
- return Response(200, 'Successfully retrieved prefab', prefab.obj)
-
-
-def PUT(request):
- """Update a prefab's name and/or contents."""
-
- request.check_required_parameters(body={'prefab': {'name': 'name'}}, path={'prefabId': 'string'})
-
- prefab = Prefab.from_id(request.params_path['prefabId'])
-
- prefab.check_exists()
- prefab.check_user_access(request.google_id)
-
- prefab.set_property('name', request.params_body['prefab']['name'])
- prefab.set_property('rack', request.params_body['prefab']['rack'])
- prefab.set_property('datetime_last_edited', Database.datetime_to_string(datetime.now()))
- prefab.update()
-
- return Response(200, 'Successfully updated prefab.', prefab.obj)
-
-
-def DELETE(request):
- """Delete this Prefab."""
-
- request.check_required_parameters(path={'prefabId': 'string'})
-
- prefab = Prefab.from_id(request.params_path['prefabId'])
-
- prefab.check_exists()
- prefab.check_user_access(request.google_id)
-
- old_object = prefab.delete()
-
- return Response(200, 'Successfully deleted prefab.', old_object)
diff --git a/web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py b/web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py
deleted file mode 100644
index b25c881d..00000000
--- a/web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py
+++ /dev/null
@@ -1,140 +0,0 @@
-from opendc.util.database import DB
-from unittest.mock import Mock
-
-
-def test_get_prefab_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/prefabs/1').status
-
-def test_get_private_prefab_not_authorized(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- res = client.get('/api/v2/prefabs/1')
- assert '403' in res.status
-
-
-def test_get_private_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '1',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- res = client.get('/api/v2/prefabs/1')
- assert '200' in res.status
-
-def test_get_public_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'public',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- res = client.get('/api/v2/prefabs/1')
- assert '200' in res.status
-
-
-def test_update_prefab_missing_parameter(client):
- assert '400' in client.put('/api/v2/prefabs/1').status
-
-
-def test_update_prefab_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/prefabs/1', json={'prefab': {'name': 'S'}}).status
-
-
-def test_update_prefab_not_authorized(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/prefabs/1', json={'prefab': {'name': 'test prefab', 'rack' : {}}}).status
-
-
-def test_update_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '1',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'update', return_value={})
- res = client.put('/api/v2/prefabs/1', json={'prefab': {'name': 'test prefab', 'rack' : {}}})
- assert '200' in res.status
-
-
-def test_delete_prefab_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/prefabs/1').status
-
-
-def test_delete_prefab_different_user(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/prefabs/1').status
-
-
-def test_delete_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '1',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'delete_one', return_value={'prefab': {'name': 'name'}})
- res = client.delete('/api/v2/prefabs/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/prefabs/test_endpoint.py b/web-server/opendc/api/v2/prefabs/test_endpoint.py
deleted file mode 100644
index 47029579..00000000
--- a/web-server/opendc/api/v2/prefabs/test_endpoint.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_prefab_missing_parameter(client):
- assert '400' in client.post('/api/v2/prefabs').status
-
-
-def test_add_prefab(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'authorizations': []})
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'datetimeCreated': '000',
- 'datetimeLastEdited': '000',
- 'authorId': 1
- })
- res = client.post('/api/v2/prefabs', json={'prefab': {'name': 'test prefab'}})
- assert 'datetimeCreated' in res.json['content']
- assert 'datetimeLastEdited' in res.json['content']
- assert 'authorId' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/__init__.py b/web-server/opendc/api/v2/projects/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/endpoint.py b/web-server/opendc/api/v2/projects/endpoint.py
deleted file mode 100644
index bf031382..00000000
--- a/web-server/opendc/api/v2/projects/endpoint.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from datetime import datetime
-
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.models.user import User
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Create a new project, and return that new project."""
-
- request.check_required_parameters(body={'project': {'name': 'string'}})
-
- topology = Topology({'name': 'Default topology', 'rooms': []})
- topology.insert()
-
- project = Project(request.params_body['project'])
- project.set_property('datetimeCreated', Database.datetime_to_string(datetime.now()))
- project.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
- project.set_property('topologyIds', [topology.get_id()])
- project.set_property('portfolioIds', [])
- project.insert()
-
- topology.set_property('projectId', project.get_id())
- topology.update()
-
- user = User.from_google_id(request.google_id)
- user.obj['authorizations'].append({'projectId': project.get_id(), 'authorizationLevel': 'OWN'})
- user.update()
-
- return Response(200, 'Successfully created project.', project.obj)
diff --git a/web-server/opendc/api/v2/projects/projectId/__init__.py b/web-server/opendc/api/v2/projects/projectId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py b/web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py b/web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py
deleted file mode 100644
index 9f6a60ec..00000000
--- a/web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from opendc.models.project import Project
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Find all authorizations for a Project."""
-
- request.check_required_parameters(path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, False)
-
- authorizations = project.get_all_authorizations()
-
- return Response(200, 'Successfully retrieved project authorizations', authorizations)
diff --git a/web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py
deleted file mode 100644
index c3bbc093..00000000
--- a/web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_authorizations_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- mocker.patch.object(DB, 'fetch_all', return_value=None)
- assert '404' in client.get('/api/v2/projects/1/authorizations').status
-
-
-def test_get_authorizations_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'name': 'test trace',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'fetch_all', return_value=[])
- res = client.get('/api/v2/projects/1/authorizations')
- assert '403' in res.status
-
-
-def test_get_authorizations(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'name': 'test trace',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'fetch_all', return_value=[])
- res = client.get('/api/v2/projects/1/authorizations')
- assert len(res.json['content']) == 0
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/projectId/endpoint.py b/web-server/opendc/api/v2/projects/projectId/endpoint.py
deleted file mode 100644
index 77b66d75..00000000
--- a/web-server/opendc/api/v2/projects/projectId/endpoint.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from datetime import datetime
-
-from opendc.models.portfolio import Portfolio
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.models.user import User
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Project."""
-
- request.check_required_parameters(path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved project', project.obj)
-
-
-def PUT(request):
- """Update a project's name."""
-
- request.check_required_parameters(body={'project': {'name': 'name'}}, path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- project.set_property('name', request.params_body['project']['name'])
- project.set_property('datetime_last_edited', Database.datetime_to_string(datetime.now()))
- project.update()
-
- return Response(200, 'Successfully updated project.', project.obj)
-
-
-def DELETE(request):
- """Delete this Project."""
-
- request.check_required_parameters(path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- for topology_id in project.obj['topologyIds']:
- topology = Topology.from_id(topology_id)
- topology.delete()
-
- for portfolio_id in project.obj['portfolioIds']:
- portfolio = Portfolio.from_id(portfolio_id)
- portfolio.delete()
-
- user = User.from_google_id(request.google_id)
- user.obj['authorizations'] = list(
- filter(lambda x: str(x['projectId']) != request.params_path['projectId'], user.obj['authorizations']))
- user.update()
-
- old_object = project.delete()
-
- return Response(200, 'Successfully deleted project.', old_object)
diff --git a/web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py b/web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py b/web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py
deleted file mode 100644
index 0bc65565..00000000
--- a/web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from opendc.models.portfolio import Portfolio
-from opendc.models.project import Project
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Add a new Portfolio for this Project."""
-
- request.check_required_parameters(path={'projectId': 'string'},
- body={
- 'portfolio': {
- 'name': 'string',
- 'targets': {
- 'enabledMetrics': 'list',
- 'repeatsPerScenario': 'int',
- },
- }
- })
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- portfolio = Portfolio(request.params_body['portfolio'])
-
- portfolio.set_property('projectId', request.params_path['projectId'])
- portfolio.set_property('scenarioIds', [])
-
- portfolio.insert()
-
- project.obj['portfolioIds'].append(portfolio.get_id())
- project.update()
-
- return Response(200, 'Successfully added Portfolio.', portfolio.obj)
diff --git a/web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py
deleted file mode 100644
index 24416cc3..00000000
--- a/web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py
+++ /dev/null
@@ -1,83 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_portfolio_missing_parameter(client):
- assert '400' in client.post('/api/v2/projects/1/portfolios').status
-
-
-def test_add_portfolio_non_existing_project(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.post('/api/v2/projects/1/portfolios',
- json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_add_portfolio_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- assert '403' in client.post('/api/v2/projects/1/portfolios',
- json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_add_portfolio(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'portfolioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- },
- 'projectId': '1',
- 'scenarioIds': [],
- })
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.post(
- '/api/v2/projects/1/portfolios',
- json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- })
- assert 'projectId' in res.json['content']
- assert 'scenarioIds' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/projectId/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/test_endpoint.py
deleted file mode 100644
index 7a862e8d..00000000
--- a/web-server/opendc/api/v2/projects/projectId/test_endpoint.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/projects/1').status
-
-
-def test_get_project_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'authorizations': []})
- res = client.get('/api/v2/projects/1')
- assert '403' in res.status
-
-
-def test_get_project_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/projects/1')
- assert '403' in res.status
-
-
-def test_get_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/projects/1')
- assert '200' in res.status
-
-
-def test_update_project_missing_parameter(client):
- assert '400' in client.put('/api/v2/projects/1').status
-
-
-def test_update_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/projects/1', json={'project': {'name': 'S'}}).status
-
-
-def test_update_project_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/projects/1', json={'project': {'name': 'S'}}).status
-
-
-def test_update_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- res = client.put('/api/v2/projects/1', json={'project': {'name': 'S'}})
- assert '200' in res.status
-
-
-def test_delete_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/projects/1').status
-
-
-def test_delete_project_different_user(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'googleId': 'other_test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }],
- 'topologyIds': []
- })
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/projects/1').status
-
-
-def test_delete_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'googleId': 'test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'topologyIds': [],
- 'portfolioIds': [],
- })
- mocker.patch.object(DB, 'update', return_value=None)
- mocker.patch.object(DB, 'delete_one', return_value={'googleId': 'test'})
- res = client.delete('/api/v2/projects/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/projectId/topologies/__init__.py b/web-server/opendc/api/v2/projects/projectId/topologies/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/topologies/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py b/web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py
deleted file mode 100644
index 211dc15d..00000000
--- a/web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from datetime import datetime
-
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.util.rest import Response
-from opendc.util.database import Database
-
-
-def POST(request):
- """Add a new Topology to the specified project and return it"""
-
- request.check_required_parameters(path={'projectId': 'string'}, body={'topology': {'name': 'string'}})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- topology = Topology({
- 'projectId': request.params_path['projectId'],
- 'name': request.params_body['topology']['name'],
- 'rooms': request.params_body['topology']['rooms'],
- })
-
- topology.insert()
-
- project.obj['topologyIds'].append(topology.get_id())
- project.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
- project.update()
-
- return Response(200, 'Successfully inserted topology.', topology.obj)
diff --git a/web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py
deleted file mode 100644
index ca123a73..00000000
--- a/web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_topology_missing_parameter(client):
- assert '400' in client.post('/api/v2/projects/1/topologies').status
-
-
-def test_add_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'topologyIds': []
- })
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'datetimeCreated': '000',
- 'datetimeLastEdited': '000',
- 'topologyIds': []
- })
- mocker.patch.object(DB, 'update', return_value={})
- res = client.post('/api/v2/projects/1/topologies', json={'topology': {'name': 'test project', 'rooms': []}})
- assert 'rooms' in res.json['content']
- assert '200' in res.status
-
-
-def test_add_topology_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- assert '403' in client.post('/api/v2/projects/1/topologies',
- json={
- 'topology': {
- 'name': 'test_topology',
- 'rooms': {}
- }
- }).status
diff --git a/web-server/opendc/api/v2/projects/test_endpoint.py b/web-server/opendc/api/v2/projects/test_endpoint.py
deleted file mode 100644
index a50735b0..00000000
--- a/web-server/opendc/api/v2/projects/test_endpoint.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_project_missing_parameter(client):
- assert '400' in client.post('/api/v2/projects').status
-
-
-def test_add_project(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'authorizations': []})
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'datetimeCreated': '000',
- 'datetimeLastEdited': '000',
- 'topologyIds': []
- })
- mocker.patch.object(DB, 'update', return_value={})
- res = client.post('/api/v2/projects', json={'project': {'name': 'test project'}})
- assert 'datetimeCreated' in res.json['content']
- assert 'datetimeLastEdited' in res.json['content']
- assert 'topologyIds' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/scenarios/__init__.py b/web-server/opendc/api/v2/scenarios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/scenarios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/scenarios/scenarioId/__init__.py b/web-server/opendc/api/v2/scenarios/scenarioId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/scenarios/scenarioId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py b/web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py
deleted file mode 100644
index 02d39063..00000000
--- a/web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from opendc.models.scenario import Scenario
-from opendc.models.portfolio import Portfolio
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Scenario."""
-
- request.check_required_parameters(path={'scenarioId': 'string'})
-
- scenario = Scenario.from_id(request.params_path['scenarioId'])
-
- scenario.check_exists()
- scenario.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved scenario.', scenario.obj)
-
-
-def PUT(request):
- """Update this Scenarios name."""
-
- request.check_required_parameters(path={'scenarioId': 'string'}, body={'scenario': {
- 'name': 'string',
- }})
-
- scenario = Scenario.from_id(request.params_path['scenarioId'])
-
- scenario.check_exists()
- scenario.check_user_access(request.google_id, True)
-
- scenario.set_property('name',
- request.params_body['scenario']['name'])
-
- scenario.update()
-
- return Response(200, 'Successfully updated scenario.', scenario.obj)
-
-
-def DELETE(request):
- """Delete this Scenario."""
-
- request.check_required_parameters(path={'scenarioId': 'string'})
-
- scenario = Scenario.from_id(request.params_path['scenarioId'])
-
- scenario.check_exists()
- scenario.check_user_access(request.google_id, True)
-
- portfolio = Portfolio.from_id(scenario.obj['portfolioId'])
- portfolio.check_exists()
- if request.params_path['scenarioId'] in portfolio.obj['scenarioIds']:
- portfolio.obj['scenarioIds'].remove(request.params_path['scenarioId'])
- portfolio.update()
-
- old_object = scenario.delete()
-
- return Response(200, 'Successfully deleted scenario.', old_object)
diff --git a/web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py b/web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py
deleted file mode 100644
index 09b7d0c0..00000000
--- a/web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py
+++ /dev/null
@@ -1,140 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_scenario_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/scenarios/1').status
-
-
-def test_get_scenario_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={
- 'portfolioId': '1',
- 'authorizations': []
- })
- res = client.get('/api/v2/scenarios/1')
- assert '403' in res.status
-
-
-def test_get_scenario_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'portfolioId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/scenarios/1')
- assert '403' in res.status
-
-
-def test_get_scenario(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'portfolioId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/scenarios/1')
- assert '200' in res.status
-
-
-def test_update_scenario_missing_parameter(client):
- assert '400' in client.put('/api/v2/scenarios/1').status
-
-
-def test_update_scenario_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/scenarios/1', json={
- 'scenario': {
- 'name': 'test',
- }
- }).status
-
-
-def test_update_scenario_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/scenarios/1', json={
- 'scenario': {
- 'name': 'test',
- }
- }).status
-
-
-def test_update_scenario(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'targets': {
- 'enabledMetrics': [],
- 'repeatsPerScenario': 1
- }
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- res = client.put('/api/v2/scenarios/1', json={'scenario': {
- 'name': 'test',
- }})
- assert '200' in res.status
-
-
-def test_delete_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/scenarios/1').status
-
-
-def test_delete_project_different_user(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'googleId': 'other_test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/scenarios/1').status
-
-
-def test_delete_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'googleId': 'test',
- 'scenarioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value={})
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.delete('/api/v2/scenarios/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/schedulers/__init__.py b/web-server/opendc/api/v2/schedulers/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/schedulers/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/schedulers/endpoint.py b/web-server/opendc/api/v2/schedulers/endpoint.py
deleted file mode 100644
index a96fdd88..00000000
--- a/web-server/opendc/api/v2/schedulers/endpoint.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from opendc.util.rest import Response
-
-SCHEDULERS = ['DEFAULT']
-
-
-def GET(_):
- """Get all available Schedulers."""
-
- return Response(200, 'Successfully retrieved Schedulers.', [{'name': name} for name in SCHEDULERS])
diff --git a/web-server/opendc/api/v2/schedulers/test_endpoint.py b/web-server/opendc/api/v2/schedulers/test_endpoint.py
deleted file mode 100644
index a0bd8758..00000000
--- a/web-server/opendc/api/v2/schedulers/test_endpoint.py
+++ /dev/null
@@ -1,2 +0,0 @@
-def test_get_schedulers(client):
- assert '200' in client.get('/api/v2/schedulers').status
diff --git a/web-server/opendc/api/v2/topologies/__init__.py b/web-server/opendc/api/v2/topologies/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/topologies/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/topologies/topologyId/__init__.py b/web-server/opendc/api/v2/topologies/topologyId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/topologies/topologyId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/topologies/topologyId/endpoint.py b/web-server/opendc/api/v2/topologies/topologyId/endpoint.py
deleted file mode 100644
index 512b050a..00000000
--- a/web-server/opendc/api/v2/topologies/topologyId/endpoint.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from datetime import datetime
-
-from opendc.util.database import Database
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Topology."""
-
- request.check_required_parameters(path={'topologyId': 'string'})
-
- topology = Topology.from_id(request.params_path['topologyId'])
-
- topology.check_exists()
- topology.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved topology.', topology.obj)
-
-
-def PUT(request):
- """Update this topology"""
- request.check_required_parameters(path={'topologyId': 'string'}, body={'topology': {'name': 'string', 'rooms': {}}})
- topology = Topology.from_id(request.params_path['topologyId'])
-
- topology.check_exists()
- topology.check_user_access(request.google_id, True)
-
- topology.set_property('name', request.params_body['topology']['name'])
- topology.set_property('rooms', request.params_body['topology']['rooms'])
- topology.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
-
- topology.update()
-
- return Response(200, 'Successfully updated topology.', topology.obj)
-
-
-def DELETE(request):
- """Delete this topology"""
- request.check_required_parameters(path={'topologyId': 'string'})
-
- topology = Topology.from_id(request.params_path['topologyId'])
-
- topology.check_exists()
- topology.check_user_access(request.google_id, True)
-
- project = Project.from_id(topology.obj['projectId'])
- project.check_exists()
- if request.params_path['topologyId'] in project.obj['topologyIds']:
- project.obj['topologyIds'].remove(request.params_path['topologyId'])
- project.update()
-
- old_object = topology.delete()
-
- return Response(200, 'Successfully deleted topology.', old_object)
diff --git a/web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py b/web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py
deleted file mode 100644
index b25cb798..00000000
--- a/web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py
+++ /dev/null
@@ -1,116 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/topologies/1')
- assert '200' in res.status
-
-
-def test_get_topology_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/topologies/1').status
-
-
-def test_get_topology_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/topologies/1')
- assert '403' in res.status
-
-
-def test_get_topology_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'projectId': '1', 'authorizations': []})
- res = client.get('/api/v2/topologies/1')
- assert '403' in res.status
-
-
-def test_update_topology_missing_parameter(client):
- assert '400' in client.put('/api/v2/topologies/1').status
-
-
-def test_update_topology_non_existent(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/topologies/1', json={'topology': {'name': 'test_topology', 'rooms': {}}}).status
-
-
-def test_update_topology_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/topologies/1', json={
- 'topology': {
- 'name': 'updated_topology',
- 'rooms': {}
- }
- }).status
-
-
-def test_update_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- assert '200' in client.put('/api/v2/topologies/1', json={
- 'topology': {
- 'name': 'updated_topology',
- 'rooms': {}
- }
- }).status
-
-
-def test_delete_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'googleId': 'test',
- 'topologyIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value={})
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.delete('/api/v2/topologies/1')
- assert '200' in res.status
-
-
-def test_delete_nonexistent_topology(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/topologies/1').status
diff --git a/web-server/opendc/api/v2/traces/__init__.py b/web-server/opendc/api/v2/traces/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/traces/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/traces/endpoint.py b/web-server/opendc/api/v2/traces/endpoint.py
deleted file mode 100644
index ee699e02..00000000
--- a/web-server/opendc/api/v2/traces/endpoint.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from opendc.models.trace import Trace
-from opendc.util.rest import Response
-
-
-def GET(_):
- """Get all available Traces."""
-
- traces = Trace.get_all()
-
- return Response(200, 'Successfully retrieved Traces', traces.obj)
diff --git a/web-server/opendc/api/v2/traces/test_endpoint.py b/web-server/opendc/api/v2/traces/test_endpoint.py
deleted file mode 100644
index 9f806085..00000000
--- a/web-server/opendc/api/v2/traces/test_endpoint.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_traces(client, mocker):
- mocker.patch.object(DB, 'fetch_all', return_value=[])
- assert '200' in client.get('/api/v2/traces').status
diff --git a/web-server/opendc/api/v2/traces/traceId/__init__.py b/web-server/opendc/api/v2/traces/traceId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/traces/traceId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/traces/traceId/endpoint.py b/web-server/opendc/api/v2/traces/traceId/endpoint.py
deleted file mode 100644
index 670f88d1..00000000
--- a/web-server/opendc/api/v2/traces/traceId/endpoint.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from opendc.models.trace import Trace
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Trace."""
-
- request.check_required_parameters(path={'traceId': 'string'})
-
- trace = Trace.from_id(request.params_path['traceId'])
-
- trace.check_exists()
-
- return Response(200, 'Successfully retrieved trace.', trace.obj)
diff --git a/web-server/opendc/api/v2/traces/traceId/test_endpoint.py b/web-server/opendc/api/v2/traces/traceId/test_endpoint.py
deleted file mode 100644
index 56792ca9..00000000
--- a/web-server/opendc/api/v2/traces/traceId/test_endpoint.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_trace_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/traces/1').status
-
-
-def test_get_trace(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'name': 'test trace'})
- res = client.get('/api/v2/traces/1')
- assert 'name' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/users/__init__.py b/web-server/opendc/api/v2/users/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/users/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/users/endpoint.py b/web-server/opendc/api/v2/users/endpoint.py
deleted file mode 100644
index 0dcf2463..00000000
--- a/web-server/opendc/api/v2/users/endpoint.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from opendc.models.user import User
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Search for a User using their email address."""
-
- request.check_required_parameters(query={'email': 'string'})
-
- user = User.from_email(request.params_query['email'])
-
- user.check_exists()
-
- return Response(200, 'Successfully retrieved user.', user.obj)
-
-
-def POST(request):
- """Add a new User."""
-
- request.check_required_parameters(body={'user': {'email': 'string'}})
-
- user = User(request.params_body['user'])
- user.set_property('googleId', request.google_id)
- user.set_property('authorizations', [])
-
- user.check_already_exists()
-
- user.insert()
-
- return Response(200, 'Successfully created user.', user.obj)
diff --git a/web-server/opendc/api/v2/users/test_endpoint.py b/web-server/opendc/api/v2/users/test_endpoint.py
deleted file mode 100644
index d60429b3..00000000
--- a/web-server/opendc/api/v2/users/test_endpoint.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_user_by_email_missing_parameter(client):
- assert '400' in client.get('/api/v2/users').status
-
-
-def test_get_user_by_email_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/users?email=test@test.com').status
-
-
-def test_get_user_by_email(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'email': 'test@test.com'})
- res = client.get('/api/v2/users?email=test@test.com')
- assert 'email' in res.json['content']
- assert '200' in res.status
-
-
-def test_add_user_missing_parameter(client):
- assert '400' in client.post('/api/v2/users').status
-
-
-def test_add_user_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'email': 'test@test.com'})
- assert '409' in client.post('/api/v2/users', json={'user': {'email': 'test@test.com'}}).status
-
-
-def test_add_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- mocker.patch.object(DB, 'insert', return_value={'email': 'test@test.com'})
- res = client.post('/api/v2/users', json={'user': {'email': 'test@test.com'}})
- assert 'email' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/users/userId/__init__.py b/web-server/opendc/api/v2/users/userId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/users/userId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/users/userId/endpoint.py b/web-server/opendc/api/v2/users/userId/endpoint.py
deleted file mode 100644
index be3462c0..00000000
--- a/web-server/opendc/api/v2/users/userId/endpoint.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from opendc.models.project import Project
-from opendc.models.user import User
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this User."""
-
- request.check_required_parameters(path={'userId': 'string'})
-
- user = User.from_id(request.params_path['userId'])
-
- user.check_exists()
-
- return Response(200, 'Successfully retrieved user.', user.obj)
-
-
-def PUT(request):
- """Update this User's given name and/or family name."""
-
- request.check_required_parameters(body={'user': {
- 'givenName': 'string',
- 'familyName': 'string'
- }},
- path={'userId': 'string'})
-
- user = User.from_id(request.params_path['userId'])
-
- user.check_exists()
- user.check_correct_user(request.google_id)
-
- user.set_property('givenName', request.params_body['user']['givenName'])
- user.set_property('familyName', request.params_body['user']['familyName'])
-
- user.update()
-
- return Response(200, 'Successfully updated user.', user.obj)
-
-
-def DELETE(request):
- """Delete this User."""
-
- request.check_required_parameters(path={'userId': 'string'})
-
- user = User.from_id(request.params_path['userId'])
-
- user.check_exists()
- user.check_correct_user(request.google_id)
-
- for authorization in user.obj['authorizations']:
- if authorization['authorizationLevel'] != 'OWN':
- continue
-
- project = Project.from_id(authorization['projectId'])
- project.delete()
-
- old_object = user.delete()
-
- return Response(200, 'Successfully deleted user.', old_object)
diff --git a/web-server/opendc/api/v2/users/userId/test_endpoint.py b/web-server/opendc/api/v2/users/userId/test_endpoint.py
deleted file mode 100644
index cdff2229..00000000
--- a/web-server/opendc/api/v2/users/userId/test_endpoint.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_user_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/users/1').status
-
-
-def test_get_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'email': 'test@test.com'})
- res = client.get('/api/v2/users/1')
- assert 'email' in res.json['content']
- assert '200' in res.status
-
-
-def test_update_user_missing_parameter(client):
- assert '400' in client.put('/api/v2/users/1').status
-
-
-def test_update_user_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/users/1', json={'user': {'givenName': 'A', 'familyName': 'B'}}).status
-
-
-def test_update_user_different_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'other_test'})
- assert '403' in client.put('/api/v2/users/1', json={'user': {'givenName': 'A', 'familyName': 'B'}}).status
-
-
-def test_update_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'test'})
- mocker.patch.object(DB, 'update', return_value={'givenName': 'A', 'familyName': 'B'})
- res = client.put('/api/v2/users/1', json={'user': {'givenName': 'A', 'familyName': 'B'}})
- assert 'givenName' in res.json['content']
- assert '200' in res.status
-
-
-def test_delete_user_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/users/1').status
-
-
-def test_delete_user_different_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'other_test'})
- assert '403' in client.delete('/api/v2/users/1').status
-
-
-def test_delete_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'test', 'authorizations': []})
- mocker.patch.object(DB, 'delete_one', return_value={'googleId': 'test'})
- res = client.delete('/api/v2/users/1')
- assert 'googleId' in res.json['content']
- assert '200' in res.status