Coverage for backend/PinchAnalysis/views/PinchAnalysisView.py: 48%

25 statements  

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

1from rest_framework.response import Response 

2from rest_framework.decorators import api_view 

3from drf_spectacular.utils import extend_schema 

4from rest_framework import serializers 

5from pinch_factory.pinch_factory import PinchFactory 

6from core.validation import api_view_validate 

7 

8class PinchRequestSerializer(serializers.Serializer): 

9 excludedSegments = serializers.ListField( 

10 child=serializers.IntegerField(), 

11 ) 

12 

13@api_view_validate 

14@extend_schema(request=PinchRequestSerializer) 

15@api_view(['POST']) 

16def pinch_analysis_view(request) -> Response: 

17 try: 

18 # Validate the request 

19 serializer = PinchRequestSerializer(data=request.data) 

20 serializer.is_valid(raise_exception=True) 

21 validated_data = serializer.validated_data 

22 excluded_segments = validated_data.get("excludedSegments", []) 

23 

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

25 

26 # Initialize PinchFactory and prepare data 

27 factory = PinchFactory(flowsheet_id) 

28 factory.run_calculate(excluded_segments=excluded_segments) 

29 

30 # Perform the calculation and return results 

31 return Response(data=None, status=200) 

32 

33 except ValueError as ve: 

34 return Response({"error": str(ve)}, status=400) 

35 

36 except Exception as e: 

37 return Response({"error": "An error occurred", "details": str(e)}, status=500)