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

24 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-11-06 23:27 +0000

1 

2from rest_framework.response import Response 

3from core.auxiliary.models.SolveState import SolveValue, SolveState 

4from core.auxiliary.serializers.SolveStateSerializer import SolveValueSerializer, SolveStateSerializer 

5from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes 

6from core.auxiliary.models.Expression import Expression 

7from rest_framework.decorators import api_view 

8from drf_spectacular.utils import extend_schema 

9from rest_framework import serializers 

10from core.validation import api_view_validate 

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 serializer = DeleteDataSerializer(data=request.data) 

30 serializer.is_valid(raise_exception=True) 

31 flowsheet_id = serializer.validated_data["flowsheet"] 

32 scenario_id = serializer.validated_data["scenario"] 

33 

34 solve_states = SolveState.objects.filter( 

35 flowsheet_id=flowsheet_id, 

36 scenario_id=scenario_id 

37 ) 

38 deleted_count, _ = solve_states.delete() 

39 # Step 2 (optional): delete Expressions that are now unused (no SolveValues linked) 

40 Expression.objects.filter(scenario_id=scenario_id, solveValues__isnull=True).delete() 

41 

42 return Response(status=200, data=f"Deleted all uploaded data (SolveStates and SolveValues) for flowsheet {flowsheet_id} and optimization {scenario_id}.")