Coverage for backend/django/core/auxiliary/services/result_summary/cache_payloads.py: 100%
27 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 typing import NamedTuple
3from common.models.notifications.payloads import ResultSummaryCalculationError
4from core.auxiliary.services.result_series_identity import (
5 ResultSeriesIndexedItemPayload,
6)
7from core.auxiliary.services.result_summary.contracts import (
8 ResultHistogramOptions,
9 ResultMetricTargets,
10 ResultStats,
11 ResultSummary,
12)
13from core.auxiliary.services.result_summary.histograms import (
14 CachedHistogramVariants,
15 cached_histogram_bins_for,
16)
17from pydantic import BaseModel, ConfigDict
20class CachedResultSummary(BaseModel):
21 model_config = ConfigDict(extra="forbid")
23 key: str
24 label: str
25 unit: str | None
26 property_value_id: int
27 indexed_items: list[ResultSeriesIndexedItemPayload]
28 stats: ResultStats
29 metric_targets: ResultMetricTargets
30 histogram_bins: CachedHistogramVariants
33class ResultSummaryCachePayload(BaseModel):
34 model_config = ConfigDict(extra="forbid")
36 scenario_id: int
37 simulation_object_id: int
38 source_task_id: int
39 summaries: list[CachedResultSummary]
42class CachedResultSummaryBuild(NamedTuple):
43 payload: ResultSummaryCachePayload
44 errors: list[ResultSummaryCalculationError]
47def cached_summary_to_result_summary(
48 summary: CachedResultSummary,
49 options: ResultHistogramOptions,
50) -> ResultSummary:
51 """Select one cached histogram variant for the public response DTO."""
53 return ResultSummary(
54 key=summary.key,
55 label=summary.label,
56 unit=summary.unit,
57 property_value_id=summary.property_value_id,
58 indexed_items=summary.indexed_items,
59 stats=summary.stats,
60 metric_targets=summary.metric_targets,
61 histogram_bins=cached_histogram_bins_for(
62 summary.histogram_bins,
63 options,
64 ),
65 )