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

26 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-05-13 02:47 +0000

1 

2from rest_framework.response import Response 

3from core.auxiliary.models.DataRow import DataRow 

4from drf_spectacular.utils import extend_schema 

5from core.auxiliary.models.DataColumn import DataColumn 

6from rest_framework.decorators import api_view 

7from rest_framework import serializers, status 

8from core.validation import api_view_validate 

9from core.managers import get_flowsheet_access 

10 

11 

12class DeleteDataSerializer(serializers.Serializer): 

13 # THe data format is e.g: 

14 # { 

15 # "data": { 

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

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

18 # } 

19 # "flowsheet": 1 

20 # } 

21 flowsheet = serializers.IntegerField() 

22 scenario = serializers.IntegerField() 

23 

24@api_view_validate 

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

26@api_view(['POST']) 

27def delete_data(request) -> Response: 

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

29 access_state = get_flowsheet_access(request.user, flowsheet_id) 

30 if access_state.has_read_access and not access_state.has_write_access: 30 ↛ 36line 30 didn't jump to line 36 because the condition on line 30 was always true

31 return Response( 

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

33 status=status.HTTP_403_FORBIDDEN, 

34 ) 

35 

36 serializer = DeleteDataSerializer(data=request.data) 

37 serializer.is_valid(raise_exception=True) 

38 flowsheet_id = serializer.validated_data["flowsheet"] 

39 scenario_id = serializer.validated_data["scenario"] 

40 

41 DataRow.objects.filter( 

42 flowsheet_id=flowsheet_id, 

43 scenario_id=scenario_id 

44 ).delete() 

45 # Step 2 (optional): delete DataColumns that are now unused (no DataCells linked) 

46 DataColumn.objects.filter(scenario_id=scenario_id, dataCells__isnull=True).delete() 

47 

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