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.2.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.2.0-py3-none-any.whl (28.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: coderfastapi-6.2.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.2.0.tar.gz
Algorithm Hash digest
SHA256 78133a7dd5d810b215cef401f29b094dbdca7f9af9196c044c05aefc31583192
MD5 830631e4b5e6c81e9f8a1f52625638c8
BLAKE2b-256 219ba1082a73ef8a57d21cb84860888404ab1355c1ce51a2228688c952156ca2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: coderfastapi-6.2.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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 59bc70ae24d95895dbcf7634211bc4c7aba152760842559236481e8726d95589
MD5 3d5e69ed7f1ff89a3c0daeff9e4f981b
BLAKE2b-256 11954402cb8d454054edc7a30fbc24f07a564be6c91b63c41bc05e98c7c15a4a

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