From 0237bc0c7747dfdd2f67e9a79118daa8a9b980d5 Mon Sep 17 00:00:00 2001 From: lrdossan Date: Thu, 6 Feb 2025 16:59:00 +0100 Subject: [PATCH] added routing to the suggested ventilation transition times --- caimira/docs/mkdocs/docs/root/installation.md | 4 +-- .../api/controller/co2_report_controller.py | 23 +++++++++++++++- .../api/controller/virus_report_controller.py | 1 - .../src/caimira/api/routes/report_routes.py | 26 ++++++++++++++++--- caimira/src/caimira/api/routes/routes.py | 7 ++--- 5 files changed, 50 insertions(+), 11 deletions(-) diff --git a/caimira/docs/mkdocs/docs/root/installation.md b/caimira/docs/mkdocs/docs/root/installation.md index 2bdc7ef9..a4126eea 100644 --- a/caimira/docs/mkdocs/docs/root/installation.md +++ b/caimira/docs/mkdocs/docs/root/installation.md @@ -284,7 +284,7 @@ CAiMIRA backend includes a REST API for programmatic interaction with its models 2. **Test the API**: - Send a `POST` request to `http://localhost:8081/virus_report` with the required inputs in the body. Example request formats can be found in the [Virus Validator Code](https://gitlab.cern.ch/caimira/caimira/blob/master/caimira/src/caimira/calculator/validators/virus/virus_validator.py#L565). + Send a `POST` request to `http://localhost:8081/virus/report` with the required inputs in the body. Example request formats can be found in the [Virus Validator Code](https://gitlab.cern.ch/caimira/caimira/blob/master/caimira/src/caimira/calculator/validators/virus/virus_validator.py#L565). 3. **Example Response**: A successful response will return data in the following format: @@ -293,7 +293,7 @@ CAiMIRA backend includes a REST API for programmatic interaction with its models { "status": "success", "message": "Results generated successfully", - "report_data": { + "results": { ... }, ... diff --git a/caimira/src/caimira/api/controller/co2_report_controller.py b/caimira/src/caimira/api/controller/co2_report_controller.py index 22db3b48..d6285916 100644 --- a/caimira/src/caimira/api/controller/co2_report_controller.py +++ b/caimira/src/caimira/api/controller/co2_report_controller.py @@ -17,7 +17,28 @@ def generate_report(model: CO2DataModel) -> typing.Dict: return dict(model.CO2_fit_params()) -def submit_CO2_form(form_data: typing.Dict) -> typing.Dict: +def generate_transition_times(CO2model: CO2DataModel, vent_transition_times: list) -> list: + # The entire ventilation changes consider the initial and final occupancy state change + occupancy_transition_times = list(CO2model.occupancy.transition_times) + all_vent_transition_times: list = sorted( + [occupancy_transition_times[0]] + + [occupancy_transition_times[-1]] + + vent_transition_times) + return all_vent_transition_times + + +def request_CO2_transition_times(form_data: typing.Dict) -> list: + data_registry: DataRegistry = DataRegistry() + + form_obj: CO2FormData = generate_form_obj(form_data=form_data, data_registry=data_registry) + CO2model: CO2DataModel = generate_model(form_obj=form_obj) + vent_transition_times: list = form_obj.find_change_points() + all_vent_transition_times: list = generate_transition_times(CO2model, vent_transition_times) + + return all_vent_transition_times + + +def request_CO2_report(form_data: typing.Dict) -> typing.Dict: data_registry: DataRegistry = DataRegistry() form_obj: CO2FormData = generate_form_obj(form_data=form_data, data_registry=data_registry) diff --git a/caimira/src/caimira/api/controller/virus_report_controller.py b/caimira/src/caimira/api/controller/virus_report_controller.py index 0b79a276..4375cc35 100644 --- a/caimira/src/caimira/api/controller/virus_report_controller.py +++ b/caimira/src/caimira/api/controller/virus_report_controller.py @@ -4,7 +4,6 @@ import typing from caimira.calculator.validators.virus.virus_validator import VirusFormData from caimira.calculator.store.data_registry import DataRegistry -from caimira.calculator.models.models import ExposureModel import caimira.calculator.report.virus_report_data as rg diff --git a/caimira/src/caimira/api/routes/report_routes.py b/caimira/src/caimira/api/routes/report_routes.py index 61ae80b6..ac261125 100644 --- a/caimira/src/caimira/api/routes/report_routes.py +++ b/caimira/src/caimira/api/routes/report_routes.py @@ -3,7 +3,7 @@ import traceback import sys from caimira.api.routes.base_handler import BaseRequestHandler from caimira.api.controller.virus_report_controller import submit_virus_form -from caimira.api.controller.co2_report_controller import submit_CO2_form +from caimira.api.controller.co2_report_controller import request_CO2_transition_times, request_CO2_report class VirusReportHandler(BaseRequestHandler): @@ -22,7 +22,25 @@ class VirusReportHandler(BaseRequestHandler): response_data = { "status": "success", "message": "Results generated successfully", - "report_data": report_data, + "results": report_data, + } + + self.write(response_data) + except Exception as e: + traceback.print_exc() + self.write_error(status_code=400, exc_info=sys.exc_info()) + + +class CO2SuggestionsHandler(BaseRequestHandler): + def post(self): + try: + form_data = json.loads(self.request.body) + suggestion_data = request_CO2_transition_times(form_data) + + response_data = { + "status": "success", + "message": "Results generated successfully", + "results": suggestion_data, } self.write(response_data) @@ -35,12 +53,12 @@ class CO2ReportHandler(BaseRequestHandler): def post(self): try: form_data = json.loads(self.request.body) - report_data = submit_CO2_form(form_data) + report_data = request_CO2_report(form_data) response_data = { "status": "success", "message": "Results generated successfully", - "report_data": report_data, + "results": report_data, } self.write(response_data) diff --git a/caimira/src/caimira/api/routes/routes.py b/caimira/src/caimira/api/routes/routes.py index 9334c4f6..76432f2f 100644 --- a/caimira/src/caimira/api/routes/routes.py +++ b/caimira/src/caimira/api/routes/routes.py @@ -1,8 +1,9 @@ from caimira.api.routes.landing_routes import LandingPageHandler -from caimira.api.routes.report_routes import VirusReportHandler, CO2ReportHandler +from caimira.api.routes.report_routes import VirusReportHandler, CO2SuggestionsHandler, CO2ReportHandler routes = [ (r"/", LandingPageHandler), - (r"/co2_report", CO2ReportHandler), - (r"/virus_report", VirusReportHandler), + (r"/co2/transition_times", CO2SuggestionsHandler), + (r"/co2/report", CO2ReportHandler), + (r"/virus/report", VirusReportHandler), ]