"""Configuration-only policy published to supported cmshopee clients.""" from datetime import datetime from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.utils.dateparse import parse_datetime from django.utils.timezone import is_aware CLIENT_SUBSCRIPTION_POLICY_VERSION = 1 CLIENT_SUBSCRIPTION_POLICY_MODES = frozenset({"off", "observe", "enforce"}) DEFAULT_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT = "2026-07-28T00:00:00+08:00" def build_client_subscription_policy(*, mode, updated_at) -> dict: normalized_mode = str(mode or "").strip().lower() if normalized_mode not in CLIENT_SUBSCRIPTION_POLICY_MODES: raise ImproperlyConfigured( "CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY must be one of: " "off, observe, enforce" ) if isinstance(updated_at, datetime): parsed_updated_at = updated_at else: raw_updated_at = str(updated_at or "").strip() if not raw_updated_at: if normalized_mode != "off": raise ImproperlyConfigured( "CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT is required " "when CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY is observe or enforce" ) raw_updated_at = DEFAULT_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT if "T" not in raw_updated_at: raise ImproperlyConfigured( "CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT must be an " "ISO 8601 datetime with timezone" ) parsed_updated_at = parse_datetime(raw_updated_at) if parsed_updated_at is None or not is_aware(parsed_updated_at): raise ImproperlyConfigured( "CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT must be an " "ISO 8601 datetime with timezone" ) return { "policy_version": CLIENT_SUBSCRIPTION_POLICY_VERSION, "subscription_check_enabled": normalized_mode != "off", "subscription_enforcement_enabled": normalized_mode == "enforce", "updated_at": parsed_updated_at.isoformat(), } def get_client_subscription_policy() -> dict: return build_client_subscription_policy( mode=getattr(settings, "CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY", "off"), updated_at=getattr( settings, "CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT", "", ), )