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
|
from datetime import datetime
from opendc.models.simulation import Simulation
from opendc.util import database, exceptions
from opendc.util.rest import Response
def DELETE(request):
"""Delete this Simulation."""
# Make sure required parameters are there
try:
request.check_required_parameters(
path={
'simulationId': 'int'
}
)
except exceptions.ParameterError as e:
return Response(400, e.message)
# Instantiate a Simulation and make sure it exists
simulation = Simulation.from_primary_key((request.params_path['simulationId'],))
if not simulation.exists():
return Response(404, '{} not found.'.format(simulation))
# Make sure this User is allowed to delete this Simulation
if not simulation.google_id_has_at_least(request.google_id, 'OWN'):
return Response(403, 'Forbidden from deleting {}.'.format(simulation))
# Delete this Simulation from the database
simulation.delete()
# Return this Simulation
return Response(
200,
'Successfully deleted {}.'.format(simulation),
simulation.to_JSON()
)
def GET(request):
"""Get this Simulation."""
# Make sure required parameters are there
try:
request.check_required_parameters(
path={
'simulationId': 'int'
}
)
except exceptions.ParameterError as e:
return Response(400, e.message)
# Instantiate a Simulation and make sure it exists
simulation = Simulation.from_primary_key((request.params_path['simulationId'],))
if not simulation.exists():
return Response(404, '{} not found.'.format(simulation))
# Make sure this User is allowed to view this Simulation
if not simulation.google_id_has_at_least(request.google_id, 'VIEW'):
return Response(403, 'Forbidden from retrieving {}.'.format(simulation))
# Return this Simulation
simulation.read()
return Response(
200,
'Successfully retrieved {}'.format(simulation),
simulation.to_JSON()
)
def PUT(request):
"""Update a simulation's name."""
# Make sure required parameters are there
try:
request.check_required_parameters(
body={
'simulation': {
'name': 'name'
}
},
path={
'simulationId': 'int'
}
)
except exceptions.ParameterError as e:
return Response(400, e.message)
# Instantiate a Simulation and make sure it exists
simulation = Simulation.from_primary_key((request.params_path['simulationId'],))
if not simulation.exists():
return Response(404, '{} not found.'.format(simulation))
# Make sure this User is allowed to edit this Simulation
if not simulation.google_id_has_at_least(request.google_id, 'EDIT'):
return Response(403, 'Forbidden from editing {}.'.format(simulation))
# Update this Simulation in the database
simulation.read()
simulation.name = request.params_body['simulation']['name']
simulation.datetime_last_edited = database.datetime_to_string(datetime.now())
simulation.update()
# Return this Simulation
return Response(
200,
'Successfully updated {}.'.format(simulation),
simulation.to_JSON()
)
|