mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-08 08:53:10 -05:00
fix: Convert Daily Schedule Time to UTC (#3914)
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
import logging
|
||||
import secrets
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
from typing import NamedTuple
|
||||
|
||||
from dateutil.tz import tzlocal
|
||||
from pydantic import field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
@@ -9,6 +13,11 @@ from mealie.core.settings.themes import Theme
|
||||
from .db_providers import AbstractDBProvider, db_provider_factory
|
||||
|
||||
|
||||
class ScheduleTime(NamedTuple):
|
||||
hour: int
|
||||
minute: int
|
||||
|
||||
|
||||
def determine_secrets(data_dir: Path, production: bool) -> str:
|
||||
if not production:
|
||||
return "shh-secret-test-key"
|
||||
@@ -58,6 +67,44 @@ class AppSettings(BaseSettings):
|
||||
ALLOW_SIGNUP: bool = False
|
||||
|
||||
DAILY_SCHEDULE_TIME: str = "23:45"
|
||||
"""Local server time, in HH:MM format. See `DAILY_SCHEDULE_TIME_UTC` for the parsed UTC equivalent"""
|
||||
|
||||
_logger: logging.Logger | None = None
|
||||
|
||||
@property
|
||||
def logger(self) -> logging.Logger:
|
||||
if self._logger is None:
|
||||
# lazy load the logger, since get_logger depends on the settings being loaded
|
||||
from mealie.core.root_logger import get_logger
|
||||
|
||||
self._logger = get_logger()
|
||||
|
||||
return self._logger
|
||||
|
||||
@property
|
||||
def DAILY_SCHEDULE_TIME_UTC(self) -> ScheduleTime:
|
||||
"""The DAILY_SCHEDULE_TIME in UTC, parsed into hours and minutes"""
|
||||
|
||||
# parse DAILY_SCHEDULE_TIME into hours and minutes
|
||||
try:
|
||||
hour_str, minute_str = self.DAILY_SCHEDULE_TIME.split(":")
|
||||
local_hour = int(hour_str)
|
||||
local_minute = int(minute_str)
|
||||
except ValueError:
|
||||
local_hour = 23
|
||||
local_minute = 45
|
||||
self.logger.exception(
|
||||
f"Unable to parse {self.DAILY_SCHEDULE_TIME=} as HH:MM; defaulting to {local_hour}:{local_minute}"
|
||||
)
|
||||
|
||||
# DAILY_SCHEDULE_TIME is in local time, so we convert it to UTC
|
||||
local_tz = tzlocal()
|
||||
now = datetime.now(local_tz)
|
||||
local_time = now.replace(hour=local_hour, minute=local_minute)
|
||||
utc_time = local_time.astimezone(timezone.utc)
|
||||
|
||||
self.logger.debug(f"Local time: {local_hour}:{local_minute} | UTC time: {utc_time.hour}:{utc_time.minute}")
|
||||
return ScheduleTime(utc_time.hour, utc_time.minute)
|
||||
|
||||
# ===============================================
|
||||
# Security Configuration
|
||||
|
||||
Reference in New Issue
Block a user