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
« 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
6class MonitoringTablePropertySerializer(StateOwnedModelSerializer):
7 class Meta:
8 model = MonitoringTableProperty
9 fields = '__all__'
10 read_only_fields = ["id", "created_at", "table", "flowsheet"]
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
24class MonitoringTableSerializer(StateOwnedModelSerializer):
25 selectedProperties = MonitoringTablePropertySerializer(many=True, required=False)
27 class Meta:
28 model = MonitoringTable
29 fields = '__all__'
30 read_only_fields = ["id", "created_at"]
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
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)
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