yksa-django-kit/README.md
2026-08-17 22:50:10 +08:00

2.2 KiB

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

# 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",
]
# 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.

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 <project>.core (table <label>_apitoken) to yksa_kit (table yksa_kit_apitoken). None of the tmtc services is deployed, so the cheap path is taken: reset the migrations and re-issue the tokens (where needed) manually.

Tests

pip install -e ".[test]"
python -m pytest

They run against tests/settings.py, a Django project with nothing in it but this package -- which is the point: if a test needs a service, the code belongs in the service.