187 files

This commit is contained in:
Home Assistant Version Control
2026-10-09 11:57:31 +00:00
parent 28fa34d78a
commit 1e1b12d52b
187 changed files with 40899 additions and 32654 deletions
+17 -2
View File
@@ -75,13 +75,16 @@ from .const import (
DIFFICULTY_TIERS,
DOMAIN,
MAX_CHORE_TAGS,
MAX_RECURRENCE_INTERVAL_DAYS,
MAX_TIME_PERIODS,
MIN_RECURRENCE_INTERVAL_DAYS,
SCHEDULE_MODES,
TAG_ID_MAX_LENGTH,
TEAM_POINTS_MODES,
TEAM_SIZE_MAX,
TIME_CATEGORY_ICONS,
is_valid_completion_sound,
recurrence_interval_days,
)
from .coord_birthdays import normalize_birthday
from .coord_inspections import INSPECTION_BONUS_MAX, INSPECTION_FAIL_MODES, INSPECTION_WINDOWS
@@ -673,6 +676,7 @@ _CHORE_EDITABLE_FIELDS = {
"claim_allowance_minutes",
"daily_limit",
"weekly_target",
"weekly_target_bonus",
"completion_sound",
"icon",
"image_url",
@@ -718,6 +722,16 @@ _CHORE_EDITABLE_FIELDS = {
}
def _recurrence(value):
"""A recurrence name; a custom every_<N>_days interval (#1038) must have N in range."""
text = str(value)
if text.startswith("every_") and text.endswith("_days") and recurrence_interval_days(text) is None:
raise vol.Invalid(
f"Custom recurrence must be every {MIN_RECURRENCE_INTERVAL_DAYS}-{MAX_RECURRENCE_INTERVAL_DAYS} days"
)
return text
def _tag_id_list(value):
"""Validate the NFC / QR tag ids linked to a chore (#923).
@@ -749,13 +763,14 @@ def _chore_payload_schema(*, require_name: bool):
# Weekly target (#883): 0 = no quota, which is the case for almost
# every chore, so it has to be a valid value rather than a floor of 1.
vol.Optional("weekly_target"): vol.All(int, vol.Range(min=0)),
vol.Optional("weekly_target_bonus"): vol.All(int, vol.Range(min=0)),
vol.Optional("completion_sound"): _completion_sound,
vol.Optional("icon"): str,
vol.Optional("image_url"): _image_url_or_blank,
vol.Optional("difficulty"): vol.In(DIFFICULTY_TIERS),
vol.Optional("schedule_mode"): vol.In(SCHEDULE_MODES),
vol.Optional("due_days"): [str],
vol.Optional("recurrence"): str,
vol.Optional("recurrence"): _recurrence,
vol.Optional("recurrence_day"): str,
vol.Optional("recurrence_start"): str,
vol.Optional("first_occurrence_mode"): str,
@@ -2500,7 +2515,7 @@ async def _ws_templates_get(hass, connection, msg, coordinator):
vol.Optional("completion_sound"): _completion_sound,
vol.Optional("schedule_mode"): vol.In(SCHEDULE_MODES),
vol.Optional("due_days"): [str],
vol.Optional("recurrence"): str,
vol.Optional("recurrence"): _recurrence,
vol.Optional("recurrence_day"): str,
vol.Optional("recurrence_start"): str,
vol.Optional("first_occurrence_mode"): str,