Coverage for backend/django/core/auxiliary/serializers/FlowsheetCloneValidationSerializer.py: 100%

26 statements  

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

1"""Schema contract for user-repairable flowsheet clone failures.""" 

2 

3from rest_framework import serializers 

4 

5from core.auxiliary.services.flowsheet_states import ( 

6 CLONE_VALIDATION_ERROR_CODE, 

7 CloneDeficiencyType, 

8) 

9 

10 

11class FlowsheetCloneDeficiencyItemSerializer(serializers.Serializer): 

12 """Describe one safe, user-repairable location in a flowsheet.""" 

13 

14 flowsheet_id = serializers.IntegerField() 

15 flowsheet_name = serializers.CharField() 

16 object_name = serializers.CharField() 

17 object_type = serializers.CharField() 

18 field_name = serializers.CharField() 

19 reference_name = serializers.CharField(allow_null=True) 

20 

21 

22class FlowsheetCloneDeficiencyCategorySerializer(serializers.Serializer): 

23 """Group bounded examples under one product-facing problem class.""" 

24 

25 code = serializers.ChoiceField( 

26 choices=[deficiency.value for deficiency in CloneDeficiencyType] 

27 ) 

28 total_count = serializers.IntegerField(min_value=1) 

29 items = FlowsheetCloneDeficiencyItemSerializer(many=True) 

30 truncated = serializers.BooleanField() 

31 

32 

33class FlowsheetCloneValidationErrorSerializer(serializers.Serializer): 

34 """Expose categorized repair locations without internal clone identifiers.""" 

35 

36 code = serializers.ChoiceField(choices=[CLONE_VALIDATION_ERROR_CODE]) 

37 categories = FlowsheetCloneDeficiencyCategorySerializer( 

38 many=True, allow_empty=False 

39 ) 

40 flowsheet_id = serializers.IntegerField() 

41 flowsheet_name = serializers.CharField() 

42 

43 

44class CloneRequestSerializer(serializers.Serializer): 

45 """Control optional data and repair behavior for a full duplicate.""" 

46 

47 repair_legacy_formula_units = serializers.BooleanField( 

48 required=False, 

49 default=False, 

50 ) 

51 include_scenario_results = serializers.BooleanField( 

52 required=False, 

53 default=False, 

54 ) 

55 

56 

57class ScenarioResultCopySummarySerializer(serializers.Serializer): 

58 """Counts shown before a user confirms a full duplicate.""" 

59 

60 has_results = serializers.BooleanField() 

61 row_count = serializers.IntegerField(min_value=0) 

62 property_count = serializers.IntegerField(min_value=0)