Coverage for backend/django/core/auxiliary/models/ScenarioResultSummaryCache.py: 100%

29 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-07-22 05:22 +0000

1from django.db import models 

2 

3from core.managers import AccessControlManager, AllFlowsheetStatesManager 

4 

5 

6class ScenarioResultSummaryStatus(models.TextChoices): 

7 """Lifecycle states for cached MSS aggregate result summaries.""" 

8 

9 PENDING = "pending" 

10 CALCULATING = "calculating" 

11 AVAILABLE = "available" 

12 PARTIAL = "partial" 

13 FAILED = "failed" 

14 

15 

16class ScenarioResultSummaryCache(models.Model): 

17 """Cached aggregate result summaries for one MSS scenario/object pair.""" 

18 

19 flowsheet_state = models.ForeignKey( 

20 "FlowsheetState", 

21 on_delete=models.CASCADE, 

22 related_name="resultSummaryCaches", 

23 ) 

24 scenario = models.ForeignKey( 

25 "Scenario", 

26 on_delete=models.CASCADE, 

27 related_name="resultSummaryCaches", 

28 ) 

29 simulationObject = models.ForeignKey( 

30 "flowsheetInternals_unitops.SimulationObject", 

31 on_delete=models.CASCADE, 

32 related_name="resultSummaryCaches", 

33 ) 

34 task = models.ForeignKey( 

35 "Task", 

36 on_delete=models.SET_NULL, 

37 null=True, 

38 related_name="resultSummaryCaches", 

39 ) 

40 status = models.CharField( 

41 max_length=32, 

42 choices=ScenarioResultSummaryStatus.choices, 

43 default=ScenarioResultSummaryStatus.PENDING, 

44 ) 

45 payload = models.JSONField(default=dict) 

46 errors = models.JSONField(default=list, blank=True) 

47 solution_count = models.PositiveIntegerField(default=0) 

48 row_count = models.PositiveIntegerField(default=0) 

49 source_solution_created_at_max = models.DateTimeField(null=True, blank=True) 

50 calculation_started_at = models.DateTimeField(null=True, blank=True) 

51 calculation_completed_at = models.DateTimeField(null=True, blank=True) 

52 calculation_failed_at = models.DateTimeField(null=True, blank=True) 

53 created_at = models.DateTimeField(auto_now_add=True) 

54 updated_at = models.DateTimeField(auto_now=True) 

55 

56 objects = AccessControlManager() 

57 all_states = AllFlowsheetStatesManager() 

58 

59 class Meta: 

60 constraints = [ 

61 models.UniqueConstraint( 

62 fields=["scenario", "simulationObject"], 

63 name="unique_result_summary_cache_per_scenario_object", 

64 ), 

65 ] 

66 indexes = [ 

67 models.Index( 

68 fields=["scenario", "simulationObject"], 

69 name="result_summary_cache_lookup", 

70 ), 

71 ]