From 4359b8bb1beae04128ba8e0cff5f58767a32373b Mon Sep 17 00:00:00 2001 From: "pierre-francois.duc" Date: Thu, 27 Oct 2022 12:25:50 +0200 Subject: [PATCH] Add a view to enable testing of model in MVS from the DB --- app/projects/dtos.py | 9 +++++++-- app/projects/helpers.py | 4 ++-- app/projects/urls.py | 5 +++++ app/projects/views.py | 12 ++++++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/projects/dtos.py b/app/projects/dtos.py index 0fc86c25..1cfe104f 100644 --- a/app/projects/dtos.py +++ b/app/projects/dtos.py @@ -257,7 +257,7 @@ def __init__( # Function to serialize scenario topology models to JSON -def convert_to_dto(scenario: Scenario): +def convert_to_dto(scenario: Scenario, testing: bool = False): # Retrieve models project = Project.objects.get(scenario=scenario) economic_data = EconomicData.objects.get(project=project) @@ -298,12 +298,17 @@ def convert_to_dto(scenario: Scenario): # to_value_type(economic_data, 'crf'), ) + evaluated_period = to_value_type(scenario, "evaluated_period") + # For testing purposes the number of simulated days is restricted to 3 or less + if testing is True and evaluated_period.value > 3: + evaluated_period.value = 3 + simulation_settings = SimulationSettingsDto( scenario.start_date.strftime( "%Y-%m-%d %H:%M" ), # datetime.combine(scenario.start_date, time()).timestamp(), scenario.time_step, - to_value_type(scenario, "evaluated_period"), + evaluated_period, ) # map_to_dto(economic_data, economic_data_dto) diff --git a/app/projects/helpers.py b/app/projects/helpers.py index 011fd675..60dba7c4 100644 --- a/app/projects/helpers.py +++ b/app/projects/helpers.py @@ -51,8 +51,8 @@ def empty(x): # Helper to convert Scenario data to MVS importable json -def format_scenario_for_mvs(scenario_to_convert): - mvs_request_dto = convert_to_dto(scenario_to_convert) +def format_scenario_for_mvs(scenario_to_convert, testing=False): + mvs_request_dto = convert_to_dto(scenario_to_convert, testing=testing) dumped_data = json.loads( json.dumps(mvs_request_dto.__dict__, default=lambda o: o.__dict__) ) diff --git a/app/projects/urls.py b/app/projects/urls.py index edb8bce6..1c20d71a 100644 --- a/app/projects/urls.py +++ b/app/projects/urls.py @@ -157,6 +157,11 @@ view_mvs_data_input, name="view_mvs_data_input", ), + path( + "test_mvs_data_input/", + test_mvs_data_input, + name="test_mvs_data_input", + ), path( "topology/mvs_simulation/", request_mvs_simulation, diff --git a/app/projects/views.py b/app/projects/views.py index f165ba2e..d59220c6 100644 --- a/app/projects/views.py +++ b/app/projects/views.py @@ -1371,7 +1371,7 @@ def asset_cops_create_or_update( @json_view @login_required @require_http_methods(["GET"]) -def view_mvs_data_input(request, scen_id=0): +def view_mvs_data_input(request, scen_id=0, testing=False): if scen_id == 0: return JsonResponse( {"status": "error", "error": "No scenario id provided"}, @@ -1382,13 +1382,14 @@ def view_mvs_data_input(request, scen_id=0): scenario = Scenario.objects.get(id=scen_id) if scenario.project.user != request.user: + logger.warning( f"Unauthorized user tried to access scenario with db id = {scen_id}." ) raise PermissionDenied try: - data_clean = format_scenario_for_mvs(scenario) + data_clean = format_scenario_for_mvs(scenario, testing) except Exception as e: logger.error( @@ -1403,6 +1404,13 @@ def view_mvs_data_input(request, scen_id=0): return JsonResponse(data_clean, status=200, content_type="application/json") +@json_view +@login_required +@require_http_methods(["GET"]) +def test_mvs_data_input(request, scen_id=0): + return view_mvs_data_input(request, scen_id=scen_id, testing=True) + + # End-point to send MVS simulation request # @json_view @login_required