Source code for core.context_processors

"""Inject this deployment's backend capabilities (Gate A) into every template."""

import logging

from django.core.cache import cache

from api.client import BackendError, fetch_capabilities

logger = logging.getLogger(__name__)
_CACHE_KEY = "deployment_capabilities"
_CACHE_TTL = 300  # seconds; tier changes take effect within this window


[docs] def deployment_capabilities(request): """Return {"deployment_capabilities": {"permission": <int>, ...}}. Cached briefly so we don't hit the backend on every request. On failure we return a zero-permission stub so gated links simply don't render. """ caps = cache.get(_CACHE_KEY) if caps is None: try: caps = fetch_capabilities() except (BackendError, Exception): # noqa: BLE001 - never break rendering logger.warning("Could not fetch deployment capabilities", exc_info=True) caps = {"permission": 0} cache.set(_CACHE_KEY, caps, _CACHE_TTL) return {"deployment_capabilities": caps}