from datetime import datetime from typing import Any _DAY_INDEX = { "mon": 0, "tue": 1, "wed": 2, "thu": 3, "fri": 4, "sat": 5, "sun": 6, } def _parse_hhmm(value: str) -> tuple[int, int]: hour_text, minute_text = value.split(":", 1) return int(hour_text), int(minute_text) def _minutes_of_day(moment: datetime) -> int: return moment.hour * 60 + moment.minute def is_restriction_active(windows: list[dict[str, Any]], moment: datetime) -> bool: if not windows: return False weekday = moment.weekday() now_minutes = _minutes_of_day(moment) for window in windows: day = window.get("day_of_week") start = str(window.get("start", "00:00")) end = str(window.get("end", "00:00")) if day not in _DAY_INDEX: continue start_h, start_m = _parse_hhmm(start) end_h, end_m = _parse_hhmm(end) start_minutes = start_h * 60 + start_m end_minutes = end_h * 60 + end_m window_day = _DAY_INDEX[day] if start_minutes <= end_minutes: if weekday == window_day and start_minutes <= now_minutes <= end_minutes: return True continue # Overnight window: e.g. 22:00 -> 02:00 if weekday == window_day and now_minutes >= start_minutes: return True if weekday == (window_day + 1) % 7 and now_minutes <= end_minutes: return True return False