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

36 statements  

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

1from django.db import transaction 

2from rest_framework import serializers 

3from ..models.MonitoringTable import MonitoringTable, MonitoringTableProperty 

4 

5class MonitoringTablePropertySerializer(serializers.ModelSerializer): 

6 class Meta: 

7 model = MonitoringTableProperty 

8 fields = '__all__' 

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

10 

11 def validate(self, attrs): 

12 table = getattr(self.instance, "table", None) 

13 flowsheet = getattr(self.instance, "flowsheet", None) 

14 if table and flowsheet and table.flowsheet_id != flowsheet.id: 14 ↛ 15line 14 didn't jump to line 15 because the condition on line 14 was never true

15 raise serializers.ValidationError("flowsheet must match table.flowsheet") 

16 return attrs 

17 

18class MonitoringTableSerializer(serializers.ModelSerializer): 

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

20 

21 class Meta: 

22 model = MonitoringTable 

23 fields = '__all__' 

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

25 

26 def create(self, validated_data): 

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

28 with transaction.atomic(): 

29 table = super().create(validated_data) 

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

31 MonitoringTableProperty.objects.create( 

32 table=table, 

33 flowsheet=table.flowsheet, 

34 **item, 

35 ) 

36 return table 

37 

38 def update(self, instance, validated_data): 

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

40 with transaction.atomic(): 

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

42 

43 if selected is not None: 

44 instance.selectedProperties.all().delete() 

45 for item in selected: 

46 MonitoringTableProperty.objects.create( 

47 table=instance, 

48 flowsheet=instance.flowsheet, 

49 **item, 

50 ) 

51 return instance