52 lines
2.5 KiB
Python
52 lines
2.5 KiB
Python
"""Single source of truth for task-field enums + numeric ranges.
|
|
|
|
The task/trigger forms exist in TWO hand-written UIs (the panel's
|
|
``task-dialog.ts`` and the HA options config-flow) plus the WS create/update
|
|
schemas and the sanitizer. This module pins the *values* those surfaces must
|
|
agree on — enum option sets and numeric bounds — so they are consumed from one
|
|
place on the Python side (WS schemas, sanitizer, config-flow selectors) and
|
|
enforced against the TypeScript dialog by the parity tripwires in
|
|
``tests/test_frontend_const_parity.py`` / ``tests/test_parity_task_fields.py``.
|
|
|
|
This is the field-level companion of ``helpers/settings_registry`` (which does
|
|
the same for the global settings). Full form *generation* from these specs is
|
|
the remaining long-term step; until then, a new enum value or bound changed
|
|
here propagates to every Python surface by construction and fails the build if
|
|
the TS dialog wasn't updated.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from ..const import (
|
|
MAX_INTERVAL_DAYS,
|
|
ROTATION_STRATEGIES,
|
|
TaskPriority,
|
|
)
|
|
from .completion_requirements import (
|
|
REQUIRABLE_COMPLETION_FIELDS as _REQUIRABLE_COMPLETION_FIELDS,
|
|
)
|
|
|
|
# ─── Enum option sets ────────────────────────────────────────────────────────
|
|
|
|
# Priority choices, in display order. Derived from the TaskPriority enum so a
|
|
# new priority level lands in the WS schemas + config-flow dropdowns
|
|
# automatically (the TS dialog is pinned by test_ts_priority_keys_match_enum).
|
|
TASK_PRIORITIES: tuple[str, ...] = tuple(p.value for p in TaskPriority)
|
|
|
|
# next_due anchoring: from the completion date (drifts) or the planned date.
|
|
INTERVAL_ANCHORS: tuple[str, ...] = ("completion", "planned")
|
|
|
|
# Shared-task rotation strategies (defined in const; re-exported here so all
|
|
# task-field consumers import from one module).
|
|
ROTATION_STRATEGY_VALUES: tuple[str, ...] = ROTATION_STRATEGIES
|
|
|
|
# Details a task can demand on completion (re-exported so every task-field
|
|
# consumer imports its enums from this one module).
|
|
REQUIRABLE_COMPLETION_FIELDS: tuple[str, ...] = _REQUIRABLE_COMPLETION_FIELDS
|
|
|
|
# ─── Numeric bounds (inclusive) ─────────────────────────────────────────────
|
|
|
|
WARNING_DAYS_RANGE: tuple[int, int] = (0, 365)
|
|
EARLIEST_COMPLETION_RANGE: tuple[int, int] = (0, 3650)
|
|
INTERVAL_DAYS_RANGE: tuple[int, int] = (1, MAX_INTERVAL_DAYS)
|