Coverage for backend/django/core/auxiliary/serializers/MonitoringTableSerializer.py: 77%

40 statements  

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

1from core.serializer_base import StateOwnedModelSerializer 

2from django.db import transaction 

3from rest_framework import serializers 

4from ..models.MonitoringTable import MonitoringTable, MonitoringTableProperty 

5 

6class MonitoringTablePropertySerializer(StateOwnedModelSerializer): 

7 class Meta: 

8 model = MonitoringTableProperty 

9 fields = '__all__' 

10 read_only_fields = ["id", "created_at", "table", "flowsheet"] 

11 

12 def validate(self, attrs): 

13 table = attrs.get("table") or getattr(self.instance, "table", None) 

14 if table is None: 14 ↛ 16line 14 didn't jump to line 16 because the condition on line 14 was always true

15 return attrs 

16 for field_name in ("simulationObject", "propertyInfo"): 

17 related = attrs.get(field_name) or getattr(self.instance, field_name, None) 

18 if related is not None and related.flowsheet_state_id != table.flowsheet_state_id: 

19 raise serializers.ValidationError( 

20 {field_name: "Referenced row must belong to the monitoring table state."} 

21 ) 

22 return attrs 

23 

24class MonitoringTableSerializer(StateOwnedModelSerializer): 

25 selectedProperties = MonitoringTablePropertySerializer(many=True, required=False) 

26 

27 class Meta: 

28 model = MonitoringTable 

29 fields = '__all__' 

30 read_only_fields = ["id", "created_at"] 

31 

32 def create(self, validated_data): 

33 selected = validated_data.pop("selectedProperties", []) 

34 with transaction.atomic(): 

35 table = super().create(validated_data) 

36 for item in selected: 36 ↛ 37line 36 didn't jump to line 37 because the loop on line 36 never started

37 MonitoringTableProperty.objects.create( 

38 table=table, 

39 flowsheet_state=table.flowsheet_state, 

40 **item, 

41 ) 

42 return table 

43 

44 def update(self, instance, validated_data): 

45 selected: list = validated_data.pop("selectedProperties", None) 

46 with transaction.atomic(): 

47 instance: MonitoringTable = super().update(instance, validated_data) 

48 

49 if selected is not None: 

50 instance.selectedProperties.all().delete() 

51 for item in selected: 

52 MonitoringTableProperty.objects.create( 

53 table=instance, 

54 flowsheet_state=instance.flowsheet_state, 

55 **item, 

56 ) 

57 return instance