Coverage for backend/django/Economics/shared/serializer_base.py: 92%
20 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-06-23 21:51 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-06-23 21:51 +0000
1from rest_framework import serializers
3from core.validation import get_current_flowsheet
6def _current_flowsheet_id() -> int | None:
7 context = get_current_flowsheet() or {}
8 flowsheet_id = context.get("flowsheet")
9 return int(flowsheet_id) if flowsheet_id is not None else None
12def _validate_same_flowsheet(instance, field_name: str, flowsheet_id: int | None) -> None:
13 if instance is not None and flowsheet_id is not None and instance.flowsheet_id != flowsheet_id: 13 ↛ 14line 13 didn't jump to line 14 because the condition on line 13 was never true
14 raise serializers.ValidationError({field_name: "Referenced row must belong to the active flowsheet."})
17class FlowsheetScopedSerializer(serializers.ModelSerializer):
18 """Serializer base that validates user-provided relations against request flowsheet context."""
20 same_flowsheet_fields: tuple[str, ...] = ()
22 def validate(self, attrs):
23 attrs = super().validate(attrs)
24 flowsheet_id = _current_flowsheet_id()
25 for field_name in self.same_flowsheet_fields:
26 value = attrs.get(field_name)
27 if value is None and self.instance is not None:
28 value = getattr(self.instance, field_name, None)
29 _validate_same_flowsheet(value, field_name, flowsheet_id)
30 return attrs