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
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
1from django.db import models
3from core.managers import AccessControlManager, AllFlowsheetStatesManager
6class ScenarioResultSummaryStatus(models.TextChoices):
7 """Lifecycle states for cached MSS aggregate result summaries."""
9 PENDING = "pending"
10 CALCULATING = "calculating"
11 AVAILABLE = "available"
12 PARTIAL = "partial"
13 FAILED = "failed"
16class ScenarioResultSummaryCache(models.Model):
17 """Cached aggregate result summaries for one MSS scenario/object pair."""
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)
56 objects = AccessControlManager()
57 all_states = AllFlowsheetStatesManager()
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 ]