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

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 

6 

7if TYPE_CHECKING: 

8 from .PropertyInfo import PropertyInfo 

9 from .PropertyValue import PropertyValue 

10 from .FlowsheetState import FlowsheetState 

11 

12 

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 ) 

29 

30 created_at = models.DateTimeField(auto_now_add=True) 

31 

32 objects = AccessControlManager() 

33 all_states = AllFlowsheetStatesManager() 

34 

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 

54 

55 def delete(self) -> None: 

56 super().delete()