mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
from typing import Optional, Union, List
|
|
from pydantic import BaseModel, model_validator, PrivateAttr
|
|
|
|
|
|
class ExportRequest(BaseModel):
|
|
# uuid which maps to a specific export request, used for tracking and logging
|
|
task_id: Union[str, None]
|
|
# uuid which maps to a specific export operation, used for tracking and logging. subtask is the child of the
|
|
# task, where the work has been distributed across workers
|
|
subtask_id: Union[str, None]
|
|
# associated portfolio id for the export request
|
|
portfolio_id: int
|
|
# list of scenario ids to export
|
|
scenario_ids: List[int]
|
|
# boolean which will overwrite the scenario ids. If this is true, we will only export the default plan for each
|
|
# property and will ignore the scenario ids
|
|
default_plans_only: Optional[bool] = False
|
|
|
|
# Private attribute to indicate whether scenario_ids should be ignored due to default_plans_only being True
|
|
_scenario_ids_ignored: bool = PrivateAttr(default=False)
|
|
|
|
@model_validator(mode="after")
|
|
def validate_default_plan_override(self):
|
|
"""
|
|
If default_plans_only is True and scenario_ids were provided,
|
|
we allow execution but make it explicit that scenario_ids
|
|
will be ignored.
|
|
"""
|
|
if self.default_plans_only and self.scenario_ids:
|
|
# We do NOT raise — we allow execution.
|
|
# We just mark the object so the handler can log/return a warning.
|
|
object.__setattr__(self, "_scenario_ids_ignored", True)
|
|
else:
|
|
object.__setattr__(self, "_scenario_ids_ignored", False)
|
|
|
|
return self
|
|
|
|
@property
|
|
def scenario_ids_ignored(self) -> bool:
|
|
return self._scenario_ids_ignored
|