Coverage for backend/common/src/common/models/notifications/payloads.py: 100%
64 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 enum import Enum
2from typing import Literal, Optional
3from pydantic import BaseModel, Field
4from common.models import CloudEventsPayload
5from ahuora_builder_types.payloads import BuildStateRequestContext
6from ahuora_builder_types.unit_model_schema import SolvedPropertyValueSchema
9class NotificationServiceMessageType(str, Enum):
10 TASK_COMPLETED = "task/completed"
11 TASK_UPDATED = "task/updated"
12 TASK_CANCELLED = "task/cancelled"
13 TASK_CANCELLING = "task/cancelling"
14 TASK_CHILDREN_CANCELLED = "task/children-cancelled"
15 BUILD_STATE_COMPLETED = "build-state/completed"
16 RESULT_SUMMARY_CALCULATING = "result-summary/calculating"
17 RESULT_SUMMARY_AVAILABLE = "result-summary/available"
18 RESULT_SUMMARY_FAILED = "result-summary/failed"
19 AUTO_REVISION_SKIPPED_ACTIVE_TASKS = (
20 "flowsheet-version/auto-save-skipped-active-tasks"
21 )
23class NotificationServiceMessage(BaseModel):
24 message_type: NotificationServiceMessageType
25 data: dict
27# For use in telling the notification (Django Channels) service to send a notification
28class NotificationServiceEnvelope(BaseModel):
29 flowsheet_id: int
30 messages: list[NotificationServiceMessage]
32NotificationEvent = CloudEventsPayload[NotificationServiceEnvelope]
34# The payload the user is sent by the notification service
35class TaskCompletedPayload(BaseModel):
36 task_id: int
39class BuildStateCompletedPayload(BaseModel):
40 context: BuildStateRequestContext
41 status: Literal["success", "error"]
42 properties: Optional[list[SolvedPropertyValueSchema]] = None
43 error: Optional[str] = None
44 failure_kind: Optional[Literal["idaes-error", "delivery-failure"]] = None
47class ResultSummaryCalculationError(BaseModel):
48 message: str
49 cause: str
50 simulation_object_id: Optional[int] = None
51 result_key: Optional[str] = None
52 property_value_id: Optional[int] = None
55class ResultSummaryCalculationStatus(str, Enum):
56 pending = "pending"
57 calculating = "calculating"
58 available = "available"
59 partial = "partial"
60 failed = "failed"
63class ResultSummaryStatusPayload(BaseModel):
64 scenario_id: int
65 simulation_object_id: int
66 source_task_id: Optional[int]
67 status: ResultSummaryCalculationStatus
68 errors: list[ResultSummaryCalculationError] = Field(default_factory=list)
71class ResultSummaryCalculatingPayload(BaseModel):
72 scenario_id: int
73 simulation_object_ids: list[int]
74 source_task_id: int
77class ResultSummaryAvailablePayload(BaseModel):
78 scenario_id: int
79 simulation_object_id: int
80 source_task_id: int
81 errors: list[ResultSummaryCalculationError] = Field(default_factory=list)
84class ResultSummaryFailedPayload(BaseModel):
85 scenario_id: int
86 simulation_object_id: int
87 source_task_id: int
88 errors: list[ResultSummaryCalculationError]