Skip to main content

py-cheema-api

py-cheema-api is a small, fast ASGI web framework built from scratch (stdlib-only) with a focus on predictable performance.

Features

  • Trie router with {param} path params
  • APIRouter composition with prefixes/tags via include_router()
  • Compiled route plans (signature inspection happens at route registration, not per request)
  • Dependency injection with Depends() including nested and yield-based dependencies
  • Parameter source markers: Query, Header, Cookie, Form, File
  • Built-in validation with Model + field() (supports Annotated, Literal, Enum, datetime, UUID, Decimal)
  • Optional Pydantic v2 compatibility (request/response models + OpenAPI schema integration when installed)
  • Multipart/form-data parsing with UploadFile
  • Multipart hardening: per-file/part/field limits + upload spooling to disk
  • StreamingResponse, FileResponse, BackgroundTask, and static file mounting
  • Response primitives: RedirectResponse, NegotiatedResponse, cache header helpers, and EventSourceResponse for SSE
  • File hardening: ETag/If-None-Match + byte range (206/416) support
  • WebSocket route support via @app.websocket(...)
  • Sub-app mounting via app.mount("/prefix", sub_app) and host routing via app.mount_host("*.example.com", app)
  • WebSocket auth helpers (websocket_token_auth, websocket_jwt_auth) and OpenAPI WS extension docs (x-cheema-websockets)
  • Security primitives: api_key_auth(), bearer_auth(), jwt_auth(), OAuth2 password/auth-code/client-credentials helpers with OpenAPI security schemas
  • Session + CSRF protection primitives (SessionMiddleware, CSRFMiddleware, CSRF helpers)
  • Testing utilities: sync TestClient and async AsyncTestClient with WebSocket test sessions
  • OpenAPI at /openapi.json
  • Swagger UI at /docs and ReDoc at /redoc
  • Lifespan startup/shutdown handlers
  • Lifespan state resources with cleanup guarantees (app.add_state_resource(...))
  • App-state dependency helpers (app.state_dependency(...), app_state_dependency(...), get_app_state(...))
  • Custom exception handlers with @app.exception_handler(...)
  • Reliability defaults: request timeout, max body size, max concurrency
  • Runtime settings model (CheemaSettings) + Cheema.from_env() for env-driven deploy config
  • Graceful shutdown request draining (shutdown_drain_timeout)
  • Background job primitives: InMemoryJobQueue with retries, delay/schedule, and idempotency keys
  • Queue adapters: CeleryQueueAdapter, RQQueueAdapter, RedisQueueAdapter
  • CI release gates: Python matrix tests/lint + package build and twine check, with trusted publishing workflow
  • Benchmark suite + perf regression gates in CI (benchmarks/bench_runtime.py)
  • HTTPException (alias for HTTPError) and a py_cheema_api import alias for FastAPI-style migrations
  • default= on Query/Header/Cookie/Form/File/Host/Body for FastAPI-style optional params (e.g. Query(default=10))
  • Native Model/field() validated data supports both item["field"] and item.field access
  • TestClient/AsyncTestClient accept json= and query strings embedded in the path, matching FastAPI's TestClient
  • Pluggable MemoryCache primitive, shareable between ResponseCacheMiddleware and your own route handlers
  • Built-in ops status endpoint via app.add_status_route() (route table, middleware stack, uptime, inflight requests, optional auth gate and custom extra payload)
  • response_class= on route decorators (@app.get(..., response_class=HTMLResponse)), matching FastAPI's pattern for wrapping plain return values
  • SPA fallback routing on mount_static(..., spa_fallback=True), serving index.html for extensionless client-side routes while still 404ing missing real assets

What's New

v1.0.1

FastAPI migration parity fixes — see MIGRATION.md for the full guide:

  • HTTPException alias for HTTPError
  • default= support on all parameter markers (Query, Header, Cookie, Form, File, Host, Body)
  • Pydantic BaseModel responses now serialize cleanly instead of being wrapped in an envelope
  • Native Model validated data supports attribute access (item.name) alongside existing dict access (item["name"])
  • TestClient/AsyncTestClient accept json= and parse query strings embedded directly in the path
  • py_cheema_api import alias, matching the PyPI distribution name

New primitives:

  • MemoryCache: a pluggable in-process cache with per-entry TTL, usable directly by app code and shareable with ResponseCacheMiddleware(cache=...) so both can read/write the same store
  • app.add_status_route(): a built-in ops status endpoint reporting the route table, middleware stack, app title/version, uptime, and inflight-request count, with an optional auth gate and an extra hook for custom stats (e.g. queue depth, connection counts)
  • response_class= on route()/get()/post()/etc. (both Cheema and APIRouter): wraps a plain return value in the given Response subclass, e.g. @app.get("/page", response_class=HTMLResponse) returning a bare string. An explicit Response return still takes precedence.
  • mount_static(prefix, directory, spa_fallback=True, index_file="index.html"): serves the mount's index.html for any unmatched path with no file extension (client-side routes), so a React/Vue/Angular build's own router can take over on refresh/direct navigation, while a genuinely missing asset (has a file extension, e.g. /assets/app.js) still 404s correctly. Off by default; existing mount_static() calls are unaffected.

v1.0.0

Initial stable release under the py-cheema-api name (renamed from TurboAPI/py-turbo-api).

Stability

  • Compatibility policy: API_COMPATIBILITY.md
  • Current status: v1.0.1

Install

From PyPI

pip install py-cheema-api

Optional: Pydantic v2 compatibility

pip install "py-cheema-api[pydantic]"

PyPI: https://pypi.org/project/py-cheema-api/

Run example

uvicorn app:app --reload

Open:

Documentation Tracks

  • Docs home (GitHub Pages entry): docs/index.md
  • Complete API reference: docs/api-reference.md
  • Tutorial: docs/tutorial.md
  • Advanced: docs/advanced.md
  • Deployment: docs/deployment.md
  • Security recipes: docs/security-recipes.md
  • Why py-cheema-api + benchmark method: docs/why-py-cheema-api.md
  • Migrating from FastAPI: MIGRATION.md
  • Benchmark methodology: BENCHMARKS.md

Benchmarks

python benchmarks/bench_runtime.py --baseline benchmarks/baseline.json --tolerance 1.20 --gate

License

Apache-2.0 (see LICENSE).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_cheema_api-1.0.1.tar.gz (96.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_cheema_api-1.0.1-py3-none-any.whl (77.0 kB view details)

Uploaded Python 3

File details

Details for the file py_cheema_api-1.0.1.tar.gz.

File metadata

  • Download URL: py_cheema_api-1.0.1.tar.gz
  • Upload date:
  • Size: 96.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for py_cheema_api-1.0.1.tar.gz
Algorithm Hash digest
SHA256 a6750f0a4b3821ff76eec0d2298c3432b418980314cff827475ca6dd137fc6f7
MD5 a89dd0b3a73405fea0bf35e09b1916ee
BLAKE2b-256 30f51ba53ad2c4fc33e8e4e59381f73db38d46ed9a16f2813fd4ceb9a47c58f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_cheema_api-1.0.1.tar.gz:

Publisher: publish.yml on pareshpanat/py-cheema-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file py_cheema_api-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: py_cheema_api-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 77.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for py_cheema_api-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 23c22618833d816f997b79232948b6e14e754debd5858ec7b1119007e17a4f67
MD5 d692621ea32a40e121c63f2d53ceedde
BLAKE2b-256 da414349782dc0eb216535958cf93817c09112064245f77f44c6167f4df4f136

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_cheema_api-1.0.1-py3-none-any.whl:

Publisher: publish.yml on pareshpanat/py-cheema-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page