Coverage for backend/django/core/auxiliary/views/DeleteMSSData.py: 97%

31 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-06-23 21:51 +0000

1 

2from rest_framework.response import Response 

3from django.db import transaction 

4from drf_spectacular.utils import extend_schema 

5from core.auxiliary.models.Scenario import Scenario, ScenarioInputModeEnum 

6from core.auxiliary.services.parameter_sweep import clear_mss_input_data 

7from rest_framework.decorators import api_view 

8from rest_framework import serializers, status 

9from core.validation import api_view_validate 

10from core.managers import get_flowsheet_access 

11 

12 

13class DeleteDataSerializer(serializers.Serializer): 

14 # THe data format is e.g: 

15 # { 

16 # "data": { 

17 # "heater_enthalpy": [1, 2, 3, 4, 5], 

18 # "heater_temperature": [1, 2, 3, 4, 5] 

19 # } 

20 # "flowsheet": 1 

21 # } 

22 flowsheet = serializers.IntegerField() 

23 scenario = serializers.IntegerField() 

24 

25@api_view_validate 

26@extend_schema(request=DeleteDataSerializer, responses=None) 

27@api_view(['POST']) 

28def delete_data(request) -> Response: 

29 flowsheet_id = request.GET.get("flowsheet") 

30 access_state = get_flowsheet_access(request.user, flowsheet_id) 

31 if access_state.has_read_access and not access_state.has_write_access: 

32 return Response( 

33 {"error": "This flowsheet is shared with read-only access."}, 

34 status=status.HTTP_403_FORBIDDEN, 

35 ) 

36 

37 serializer = DeleteDataSerializer(data=request.data) 

38 serializer.is_valid(raise_exception=True) 

39 flowsheet_id = serializer.validated_data["flowsheet"] 

40 scenario_id = serializer.validated_data["scenario"] 

41 

42 with transaction.atomic(): 

43 scenario = Scenario.objects.filter(id=scenario_id, flowsheet_id=flowsheet_id).first() 

44 if scenario is not None: 44 ↛ 49line 44 didn't jump to line 49

45 clear_mss_input_data(scenario) 

46 scenario.mss_input_mode = ScenarioInputModeEnum.Csv 

47 scenario.save(update_fields=["mss_input_mode"]) 

48 

49 return Response(status=200, data=f"Deleted all uploaded data (DataRows and DataCells) for flowsheet {flowsheet_id} and scenario {scenario_id}.")