Law/app/api/admin/requests_modules/common.py
2026-02-27 18:46:07 +03:00

29 lines
870 B
Python

from __future__ import annotations
from datetime import datetime, timedelta, timezone
def parse_datetime_safe(value: object) -> datetime | None:
if value is None:
return None
if isinstance(value, datetime):
return value if value.tzinfo else value.replace(tzinfo=timezone.utc)
text = str(value).strip()
if not text:
return None
if text.endswith("Z"):
text = text[:-1] + "+00:00"
try:
parsed = datetime.fromisoformat(text)
except ValueError:
return None
if parsed.tzinfo is None:
parsed = parsed.replace(tzinfo=timezone.utc)
return parsed
def normalize_important_date_or_default(raw: object, *, default_days: int = 3) -> datetime:
parsed = parse_datetime_safe(raw)
if parsed:
return parsed
return datetime.now(timezone.utc) + timedelta(days=default_days)