Skip to main content

coderfastapi

Project description

Coder FastAPI

Security and utility library for building FastAPI applications with authentication, authorization, and pagination out of the box.

Features

  • SecureRouter — Drop-in APIRouter replacement that enforces authentication and ACL-based authorization on every route
  • Authentication policies — Pluggable strategies for JWT (Bearer token) and session-based authentication
  • Authorization policies — Pyramid-style ACL authorization with Allow/Deny rules and composable principals
  • JWT providers — Extensible provider system for token creation and request augmentation (expiration, user data, recovery mode)
  • Session management — Abstract session manager backed by Redis with configurable TTL and secure token generation
  • Pagination — Cursor-based pagination decorator that auto-generates RFC 5988 Link headers
  • Cloud logging — Google Cloud Logging integration with Cloud Trace context propagation middleware
  • Validation schemas — Pydantic models for query parameters, pagination cursors, and aggregation filters

Installation

pip install coderfastapi

Quick Start

Secure Router with JWT Authentication

from coderfastapi.lib.router import SecureRouter
from coderfastapi.lib.security.acl import ACLProvider
from coderfastapi.lib.security.policies.authentication.jwt import JWTAuthenticationPolicy
from coderfastapi.lib.security.policies.authorization.user import UserAuthorizationPolicy
from fastapi import FastAPI

app = FastAPI()
authentication_policy = JWTAuthenticationPolicy(secret_key="your-secret-key")
authorization_policy = UserAuthorizationPolicy(acl_provider=ACLProvider())
router = SecureRouter(authentication_policy, authorization_policy)

@router.get("/users", permission="public")
async def list_users(request):
    ...

app.include_router(router)

Session Management

from datetime import timedelta

from codercore.lib.redis import connection
from coderfastapi.lib.security import UserSessionManager

cache_connection = connection(host="localhost")
session_manager = UserSessionManager(
    cache_connection=cache_connection,
    session_ttl=timedelta(hours=24),
)

session = await session_manager.create_session(user_id=str(user.id))
retrieved = await session_manager.get_session_by_id(session.id)

Paginated Endpoints

from coderfastapi.lib.decorators import paginate
from coderfastapi.lib.validation.schemas.query import QueryParameters

@router.get("/items")
@paginate("id")
async def list_items(params: QueryParameters = Depends()):
    ...  # return list of items. Link headers are generated automatically

Requirements

  • Python 3.12+
  • Redis 7+ (required by session management only)

All other features — JWT authentication, authorization, pagination, cloud logging — work without Redis.

Documentation

Build and serve the API reference locally:

pip install -e ".[docs]"
mkdocs serve

Then visit http://127.0.0.1:8000. To build static HTML:

mkdocs build

Development

pip install -e ".[test,dev]"

Running Tests

Tests run against a real Redis instance via Docker Compose:

docker compose -f test-compose.yml up --build

Linting

This project uses pre-commit for linting:

pre-commit install
pre-commit run --all-files

License

Apache-2.0

Project details


Download files

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

Source Distribution

coderfastapi-6.4.0.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

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

coderfastapi-6.4.0-py3-none-any.whl (28.8 kB view details)

Uploaded Python 3

File details

Details for the file coderfastapi-6.4.0.tar.gz.

File metadata

  • Download URL: coderfastapi-6.4.0.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for coderfastapi-6.4.0.tar.gz
Algorithm Hash digest
SHA256 054f707a741998e2de95ef841728953b4812b4774309968c8400e28422c5f6c5
MD5 a50d813971dfeb7505737ffab085fb6c
BLAKE2b-256 4574501b924aa6c4d0714e250c2875e526247b6e75631928804e49ea49c6a510

See more details on using hashes here.

File details

Details for the file coderfastapi-6.4.0-py3-none-any.whl.

File metadata

  • Download URL: coderfastapi-6.4.0-py3-none-any.whl
  • Upload date:
  • Size: 28.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for coderfastapi-6.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 88212ed96aa40ae82e3048c38bde730609feb139c5ac9341223da0737fea1e54
MD5 faccbb6cbac0db9dd42f229a912dabdc
BLAKE2b-256 a764c62ddafdfb5a05a6f7b324720aecffb254b4b37d1b4af5490c16f736807c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page