main
Under RSGI __rsgi_init__ is called before the loop starts, so asyncio.get_running_loop() raises RuntimeError inside setup(). Spell out that mixins must use the loop they are given, since the ASGI lifespan incidentally runs with a live loop.
kaya
A lightweight ASGI web framework with method-aware routing, path matching, and recursive wildcard support.
Packages
This repository is a monorepo for the Kaya framework. The code is split into independent packages under packages/:
- kaya-core — core routing, HTTP/WS abstractions, and ASGI adapter (
packages/kaya-core/) - kaya-rsgi — RSGI/Granian integration (
packages/kaya-rsgi/) - kaya-session — server-side HTTP session management (
packages/kaya-session/) - kaya-session-redis — Redis-backed session storage (
packages/kaya-session-redis/) - kaya-session-memcache — memcached-backed session storage (
packages/kaya-session-memcache/) - kaya-oidc — OpenID Connect authentication (
packages/kaya-oidc/) - kaya-openapi — automatic OpenAPI specification generation (
packages/kaya-openapi/) - kaya-cors — CORS (Cross-Origin Resource Sharing) support (
packages/kaya-cors/) - kaya-forwarded — trusted-proxy
Forwarded/X-Forwarded-*client address resolution (packages/kaya-forwarded/)
Additional kaya-* packages can be added as new directories under packages/.
Build & run locally
Install dev dependencies:
pip install --index-url https://gitea.woggioni.net/api/packages/woggioni/pypi/simple --extra-index-url https://pypi.org/simple -r requirements-dev.txt
Install the packages in development mode:
pip install -e packages/kaya-core -e packages/kaya-rsgi -e packages/kaya-session -e packages/kaya-session-redis -e packages/kaya-session-memcache -e packages/kaya-oidc -e packages/kaya-openapi -e packages/kaya-cors -e packages/kaya-forwarded
Run the example:
python example/hello.py
Tests
python -m unittest discover -s packages/kaya-core/tests
python -m unittest discover -s packages/kaya-rsgi/tests
python -m unittest discover -s packages/kaya-session/tests
python -m unittest discover -s packages/kaya-session-redis/tests
python -m unittest discover -s packages/kaya-session-memcache/tests
python -m unittest discover -s packages/kaya-oidc/tests
python -m unittest discover -s packages/kaya-openapi/tests
python -m unittest discover -s packages/kaya-cors/tests
python -m unittest discover -s packages/kaya-forwarded/tests
Static analysis
mypy -p kaya.core
mypy -p kaya.rsgi
mypy -p kaya.session
mypy -p kaya.session.redis
mypy -p kaya.session.memcache
mypy -p kaya.oidc
mypy -p kaya.openapi
mypy -p kaya.cors
mypy -p kaya.forwarded
Building packages
python -m build packages/kaya-core
python -m build packages/kaya-rsgi
python -m build packages/kaya-session
python -m build packages/kaya-session-redis
python -m build packages/kaya-session-memcache
python -m build packages/kaya-oidc
python -m build packages/kaya-openapi
python -m build packages/kaya-cors
python -m build packages/kaya-forwarded
Languages
Python
100%