Coverage for backend/django/PinchAnalysis/views/PinchAnalysisView.py: 87%
29 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-05-13 02:47 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-05-13 02:47 +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, status
5from pinch_factory.pinch_factory import PinchFactory
6from core.validation import api_view_validate
7from core.managers import get_flowsheet_access
9class PinchRequestSerializer(serializers.Serializer):
10 excludedSegments = serializers.ListField(
11 child=serializers.IntegerField(),
12 )
14@api_view_validate
15@extend_schema(request=PinchRequestSerializer)
16@api_view(['POST'])
17def pinch_analysis_view(request) -> Response:
18 try:
19 flowsheet_id = request.GET.get("flowsheet")
20 access_state = get_flowsheet_access(request.user, flowsheet_id)
21 if access_state.has_read_access and not access_state.has_write_access:
22 return Response(
23 {"error": "This flowsheet is shared with read-only access."},
24 status=status.HTTP_403_FORBIDDEN,
25 )
27 # Validate the request
28 serializer = PinchRequestSerializer(data=request.data)
29 serializer.is_valid(raise_exception=True)
30 validated_data = serializer.validated_data
31 excluded_segments = validated_data.get("excludedSegments", [])
33 # Initialize PinchFactory and prepare data
34 factory = PinchFactory(flowsheet_id)
35 factory.run_calculate(excluded_segments=excluded_segments)
37 # Perform the calculation and return results
38 return Response(data=None, status=200)
40 except ValueError as ve:
41 return Response({"error": str(ve)}, status=400)
43 except Exception as e:
44 return Response({"error": "An error occurred", "details": str(e)}, status=500)