# yksa-django-kit Common Django modules for use across various YKSA services. ## Install ``` yksa-django-kit @ git+https://git.intra.yksa.space/web/yksa-django-kit.git@v0.1.0 ``` ## Wire up ```python # settings/base.py from yksa_kit.settings import read_secret, env_bool YKSA_SERVICE = "tdas" # required YKSA_USER_AGENT = "yksa-tdas/0.1 (+https://tdas.tmtc.yksa.space)" INSTALLED_APPS = [..., "yksa_kit", ...] MIDDLEWARE = [..., "yksa_kit.middleware.UserTimezoneMiddleware", ...] TEMPLATES[0]["OPTIONS"]["context_processors"] += [ "yksa_kit.context_processors.ui_preferences", ] ``` ```python # urls.py urlpatterns = [ path("", include("yksa_kit.urls")), ... ] ``` `YKSA_SERVICE` is used as the Redis cache key, don't leave it unset. The templates the timezone and policy views render (`timezone_preferences.html`, `privacy_policy.html`, `cookie_policy.html`) come from [yksa-web-kit](../yksa-web-kit). ## What is in it | Module | | |---|---| | `models.ApiToken` | static bearer token, `read` or `ingest` | | `auth` | header / query / session carriers, `request_has_valid_token`, `request_can_ingest` | | `admin` | `ApiToken` admin | | `choices.RunStatus` | running / success / failed / skipped | | `http.get` | retries 429 and 5xx, honours `Retry-After`, sends the service User-Agent | | `host_rate_limit` | Redis fixed-window buckets, per-minute and per-hour | | `middleware.UserTimezoneMiddleware` | activates the session timezone | | `context_processors.ui_preferences` | timezone name, quick-pick zones, cookie consent | | `views` + `urls` | health, timezone preferences, privacy, cookies | | `settings` | `read_secret`, `env_bool`, `env_list` | ## Migrating a service `ApiToken` moves from `.core` (table `