Coverage for backend/django/core/auxiliary/models/ControlValue.py: 85%
22 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 __future__ import annotations
2from django.db import models
3from typing import TYPE_CHECKING
4from core.managers import AccessControlManager, AllFlowsheetStatesManager
5from core.auxiliary.models.FlowsheetHistoryModel import FlowsheetHistoryModel
7if TYPE_CHECKING:
8 from .PropertyInfo import PropertyInfo
9 from .PropertyValue import PropertyValue
10 from .FlowsheetState import FlowsheetState
13class ControlValue(FlowsheetHistoryModel, models.Model):
14 flowsheet_state = models.ForeignKey(
15 "FlowsheetState", on_delete=models.CASCADE, related_name="controlValues"
16 )
17 manipulated = models.OneToOneField(
18 "PropertyValue",
19 on_delete=models.CASCADE,
20 related_name="controlManipulated",
21 null=True,
22 )
23 setPoint = models.OneToOneField(
24 "PropertyValue",
25 on_delete=models.CASCADE,
26 related_name="controlSetPoint",
27 null=True,
28 )
30 created_at = models.DateTimeField(auto_now_add=True)
32 objects = AccessControlManager()
33 all_states = AllFlowsheetStatesManager()
35 @classmethod
36 def create(
37 cls,
38 manipulated: PropertyValue,
39 setPoint: PropertyValue,
40 flowsheet_state: FlowsheetState,
41 ) -> "ControlValue":
42 if manipulated.flowsheet_state_id != setPoint.flowsheet_state_id: 42 ↛ 43line 42 didn't jump to line 43 because the condition on line 42 was never true
43 raise ValueError(
44 "Control values must reference properties in the same state."
45 )
46 if manipulated.flowsheet_state_id != flowsheet_state.pk: 46 ↛ 47line 46 didn't jump to line 47 because the condition on line 46 was never true
47 raise ValueError("Control properties must belong to the requested state.")
48 instance = cls.objects.create(
49 manipulated=manipulated,
50 setPoint=setPoint,
51 flowsheet_state=flowsheet_state,
52 )
53 return instance
55 def delete(self) -> None:
56 super().delete()