""" Shared Jinja2 templates configuration. All routers should import `templates` from this module to get consistent filter and global function registration. """ import json as _json from fastapi.templating import Jinja2Templates # Import timezone utilities from backend.utils.timezone import ( format_local_datetime, format_local_time, get_user_timezone, get_timezone_abbreviation ) def jinja_local_datetime(dt, fmt="%Y-%m-%d %H:%M"): """Jinja filter to convert UTC datetime to local timezone.""" return format_local_datetime(dt, fmt) def jinja_local_time(dt): """Jinja filter to format time in local timezone.""" return format_local_time(dt) def jinja_timezone_abbr(): """Jinja global to get current timezone abbreviation.""" return get_timezone_abbreviation() # Create templates instance templates = Jinja2Templates(directory="templates") def jinja_local_date(dt, fmt="%m-%d-%y"): """Jinja filter: format a UTC datetime as a local date string (e.g. 02-19-26).""" return format_local_datetime(dt, fmt) def jinja_fromjson(s): """Jinja filter: parse a JSON string into a dict (returns {} on failure).""" if not s: return {} try: return _json.loads(s) except Exception: return {} def jinja_same_date(dt1, dt2) -> bool: """Jinja global: True if two datetimes fall on the same local date.""" if not dt1 or not dt2: return False try: d1 = format_local_datetime(dt1, "%Y-%m-%d") d2 = format_local_datetime(dt2, "%Y-%m-%d") return d1 == d2 except Exception: return False # Register Jinja filters and globals templates.env.filters["local_datetime"] = jinja_local_datetime templates.env.filters["local_time"] = jinja_local_time templates.env.filters["local_date"] = jinja_local_date templates.env.filters["fromjson"] = jinja_fromjson templates.env.globals["timezone_abbr"] = jinja_timezone_abbr templates.env.globals["get_user_timezone"] = get_user_timezone templates.env.globals["same_date"] = jinja_same_date