1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
from opendc.models.experiment import Experiment
from opendc.util import database, exceptions
from opendc.util.rest import Response
def GET(request):
"""Get this Experiment."""
try:
request.check_required_parameters(
path = {
'simulationId': 'int',
'experimentId': 'int'
}
)
except exceptions.ParameterError as e:
return Response(400, e.message)
# Instantiate an Experiment from the database
experiment = Experiment.from_primary_key((request.params_path['experimentId'],))
# Make sure this Experiment exists
if not experiment.exists():
return Response(404, '{} not found.'.format(experiment))
# Make sure this user is authorized to view this Experiment
if not experiment.google_id_has_at_least(request.google_id, 'VIEW'):
return Response(403, 'Forbidden from retrieving {}.'.format(experiment))
# Return this Experiment
experiment.read()
return Response(
200,
'Successfully retrieved {}.'.format(experiment),
experiment.to_JSON()
)
def PUT(request):
"""Update this Experiment's Path, Trace, Scheduler, and/or name."""
# Make sure required parameters are there
try:
request.check_required_parameters(
path = {
'simulationId': 'int',
'experimentId': 'int'
},
body = {
'experiment': {
'pathId': 'int',
'traceId': 'int',
'schedulerName': 'string',
'name': 'string'
}
}
)
except exceptions.ParameterError as e:
return Response(400, e.message)
# Instantiate an Experiment from the database
experiment = Experiment.from_primary_key((request.params_path['experimentId'],))
# Make sure this Experiment exists
if not experiment.exists():
return Response(404, '{} not found.'.format(experiment))
# Make sure this user is authorized to edit this Experiment
if not experiment.google_id_has_at_least(request.google_id, 'EDIT'):
return Response(403, 'Forbidden from updating {}.'.format(experiment))
# Update this Experiment
experiment.path_id = request.params_body['experiment']['pathId']
experiment.trace_id = request.params_body['experiment']['traceId']
experiment.scheduler_name = request.params_body['experiment']['schedulerName']
experiment.name = request.params_body['experiment']['name']
try:
experiment.update()
except exceptions.ForeignKeyError:
return Response(400, 'Foreign key error.')
# Return this Experiment
return Response(
200,
'Successfully updated {}.'.format(experiment),
experiment.to_JSON()
)
def DELETE(request):
"""Delete this Experiment."""
# Make sure required parameters are there
try:
request.check_required_parameters(
path = {
'simulationId': 'int',
'experimentId': 'int'
}
)
except exceptions.ParameterError as e:
return Response(400, e.message)
# Instantiate an Experiment and make sure it exists
experiment = Experiment.from_primary_key((request.params_path['experimentId'],))
if not experiment.exists():
return Response(404, '{} not found.'.format(experiment))
# Make sure this user is authorized to delete this Experiment
if not experiment.google_id_has_at_least(request.google_id, 'EDIT'):
return Response(403, 'Forbidden from deleting {}.'.format(experiment))
# Delete and return this Experiment
experiment.delete()
return Response(
200,
'Successfully deleted {}.'.format(experiment),
experiment.to_JSON()
)
|