1"""
2This module provides REST API handlers for model and sensor uncertainties of scenarios.
3"""
4import warnings
5import falcon
6
7from .handlers import ScenarioBaseHandler
8from ...simulation import SensorNoise, ModelUncertainty
9
10
[docs]
11class ScenarioModelUncertaintyHandler(ScenarioBaseHandler):
12 """
13 Class for handling GET and POST requests concerning model uncertainty.
14 """
[docs]
15 def on_get(self, _, resp: falcon.Response, scenario_id: str) -> None:
16 """
17 Gets the model uncertainties of a given scenario.
18
19 Parameters
20 ----------
21 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
22 Response instance.
23 scenario_id : `str`
24 UUID of the scenario.
25 """
26 try:
27 if self.scenario_mgr.validate_uuid(scenario_id) is False:
28 self.send_invalid_resource_id_error(resp)
29 return
30
31 my_model_uncertainties = self.scenario_mgr.get(scenario_id).model_uncertainty
32 self.send_json_response(resp, my_model_uncertainties)
33 except Exception as ex:
34 warnings.warn(str(ex))
35 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
36
[docs]
37 def on_post(self, req: falcon.Request, resp: falcon.Response, scenario_id: str) -> None:
38 """
39 Sets the model uncertainties of a given scenario.
40
41 Parameters
42 ----------
43 req : `falcon.Request <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#request>`_
44 Request instance.
45 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
46 Response instance.
47 scenario_id : `str`
48 UUID of the scenario.
49 """
50 try:
51 if self.scenario_mgr.validate_uuid(scenario_id) is False:
52 self.send_invalid_resource_id_error(resp)
53 return
54
55 model_uncertainty = self.load_json_data_from_request(req)
56 if not isinstance(model_uncertainty, ModelUncertainty):
57 self.send_json_parsing_error(resp)
58 return
59
60 self.scenario_mgr.get(scenario_id).model_uncertainty = model_uncertainty
61 except Exception as ex:
62 warnings.warn(str(ex))
63 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
64
65
[docs]
66class ScenarioSensorUncertaintyHandler(ScenarioBaseHandler):
67 """
68 Class for handling GET and POST requests concerning sensor uncertainty (i.e. noise).
69 """
[docs]
70 def on_get(self, _, resp: falcon.Response, scenario_id: str) -> None:
71 """
72 Gets the sensor uncertainty (i.e. noise) of a given scenario.
73
74 Parameters
75 ----------
76 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
77 Response instance.
78 scenario_id : `str`
79 UUID of the scenario.
80 """
81 try:
82 if self.scenario_mgr.validate_uuid(scenario_id) is False:
83 self.send_invalid_resource_id_error(resp)
84 return
85
86 my_sensor_noise = self.scenario_mgr.get(scenario_id).sensor_noise
87 self.send_json_response(resp, my_sensor_noise)
88 except Exception as ex:
89 warnings.warn(str(ex))
90 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR
91
[docs]
92 def on_post(self, req: falcon.Request, resp: falcon.Response, scenario_id: str) -> None:
93 """
94 Sets the sensor uncertainty (i.e. noise) of a given scenario.
95
96 Parameters
97 ----------
98 req : `falcon.Request <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#request>`_
99 Request instance.
100 resp : `falcon.Response <https://falcon.readthedocs.io/en/stable/api/request_and_response_asgi.html#response>`_
101 Response instance.
102 scenario_id : `str`
103 UUID of the scenario.
104 """
105 try:
106 if self.scenario_mgr.validate_uuid(scenario_id) is False:
107 self.send_invalid_resource_id_error(resp)
108 return
109
110 sensor_noise = self.load_json_data_from_request(req)
111 if not isinstance(sensor_noise, SensorNoise):
112 self.send_json_parsing_error(resp)
113 return
114
115 self.scenario_mgr.get(scenario_id).sensor_noise = sensor_noise
116 except Exception as ex:
117 warnings.warn(str(ex))
118 resp.status = falcon.HTTP_INTERNAL_SERVER_ERROR