Skip to main content

hexastack-fastapi

hexastack-fastapi

FastAPI presentation adapter for Hexastack: automatic CQRS routing, database session middleware, exception mapping, and health check endpoints.

PyPI: hexastack-fastapi Python 3.13+ Coverage License: Apache 2.0 Accessibility: WCAG 2.1 AA Tested with: axe--core

1. Overview & Capabilities

  • Automatic CQRS Routing & Feature Gating: Map HTTP endpoints directly to CommandBusPort or QueryBusPort using @api_command and @api_query, with native feature flag route guards (@feature_flag_route and require_feature(...)).
  • Server-Sent Events (SSE) Real-Time Streaming: Native ServerSentEvent formatting and EventSourceResponse supporting chunked transfer encoding, keep-alive heartbeat pings, and direct streaming queries on CqrsRouter.add_streaming_query.
  • WebSockets Real-Time Channel Manager & CQRS Bridge: WebSocketConnectionManager managing connection pools, room/channel groupings, and broadcasts, alongside WebSocketCqrsBridge mapping incoming socket JSON actions into CQRS Commands and Queries.
  • Decoupled Database Session Middleware: DbSessionMiddleware (sync) and AsyncDbSessionMiddleware (async) manage session-per-request lifecycles by consuming sessionmakers from DI without a hard dependency on hexastack-db.
  • Standardized Exception Handlers: Automatically translates domain exceptions (EntityNotFoundError, UniqueConstraintViolationError, HexastackError) into appropriate HTTP status codes (404, 409, 500) and structured JSON error envelopes.
  • Observability & Correlation Middleware: Injects X-Correlation-ID headers, logs HTTP request lifecycles, and captures HTTP RED metrics (HttpMetricsMiddleware) exposing a standard /metrics endpoint.
  • Built-in Health Checks: Configurable /health and /ready endpoints verifying container and subsystem readiness.
  • NiceGUI Reactive UI & DevTools Dashboard: Optional [ui] presentation adapter providing ui_page, dispatch_command, dispatch_query, and a zero-config interactive developer console (mount_devtools_dashboard) for inspecting CQRS buses, feature flags, and DI services.

2. Package Anatomy & Key Components

hexastack_fastapi/
├── domain/          # HealthStatus, HTTP error envelope models, HexastackFastApiConfig
├── adapters/        # routing decorators, SSE streaming, WebSockets, health endpoints, db_session middleware, dependencies, NiceGUI UI adapter
└── infra/           # create_fastapi_app, FastApiBootstrapper (order=30), exception handlers, correlation/logging middlewares

Key Exports

Category Exports
Application Factory create_fastapi_app, FastApiBootstrapper (order=30)
Decorators @api_command, @api_query, @feature_flag_route, @rate_limit, RouteMetadata
Dependencies get_container, get_pipeline, get_feature_flags, require_feature, get_rate_limiter, require_rate_limit
Documentation Mounting mount_zensical_docs, DocumentationNotFoundError, ZensicalDocsConfig
Exception Handlers register_exception_handlers, domain_exception_handler
Middlewares DbSessionMiddleware, AsyncDbSessionMiddleware, add_db_session_middleware, CorrelationMiddleware, HttpLoggingMiddleware
Rate Limiting SlowapiRateLimiterAdapter, get_remote_address, get_user_or_ip_key, RateLimitConfig
Reactive UI (NiceGUI) dispatch_command, dispatch_query, mount_devtools_dashboard, mount_ui_app, ui_page
Real-Time Streaming (SSE & WebSockets) EventSourceResponse, ServerSentEvent, WebSocketConnectionManager, WebSocketCqrsBridge
Routing CqrsRouter, autodiscover_routes
Testing, E2E & Demo Narration create_test_client, check_openapi_conformance, EphemeralServer, ephemeral_server, find_free_port, smart_click, DemoNarrator, VIRTUAL_CURSOR_SCRIPT

3. Monorepo & Sibling Relationships

graph TD
    subgraph ClientRequests ["Client HTTP Inbound"]
        HTTP["HTTP Client Requests"]
    end

    subgraph FastApiLayer ["hexastack-fastapi"]
        APP["FastAPI Application"]
        MW["Middleware (Correlation, HTTP Logging, DB Session)"]
        ROUTER["CQRS Route Dispatcher"]
    end

    subgraph CQRSExecution ["hexastack-cqrs"]
        CBUS["CommandBusPort"]
        QBUS["QueryBusPort"]
    end

    subgraph DecoupledProviders ["Decoupled Providers (via DI)"]
        DB_FACTORY["sessionmaker / async_sessionmaker (from hexastack-db)"]
        LOG_PORT["LoggerPort (from hexastack-logging)"]
    end

    HTTP --> APP
    APP --> MW
    MW --> ROUTER
    ROUTER -->|dispatches to| CBUS
    ROUTER -->|dispatches to| QBUS

    MW -. consumes session factory from DI .-> DB_FACTORY
    MW -. consumes LoggerPort from DI .-> LOG_PORT

Explicit Dependencies (Direct)

  • hexastack-core: DI container, core ports, exception registry, and context propagation.
  • hexastack-cqrs: CommandBusPort and QueryBusPort for message dispatching.
  • fastapi>=0.141.1: Web framework and ASGI routing.

Implied / Behavioral Relationships (DI-Mediated)

  • Zero-Dependency DB Session Management: DbSessionMiddleware dynamically resolves SQLAlchemy sessionmaker from DI without directly importing hexastack-db.
  • Telemetry Integration: HttpLoggingMiddleware outputs structured request telemetry through LoggerPort.
  • Exception Mapping: Registers global exception handlers translating core domain errors into standard HTTP error responses.

4. Installation

# Standalone install
pip install hexastack-fastapi

# With Uvicorn development server
pip install "hexastack-fastapi[web]"  # or: pip install "hexastack[web]"

# Via umbrella package
pip install "hexastack[fastapi]"

5. Configuration Reference

[hexastack.fastapi]
title = "Hexastack API"
version = "1.0.0"
docs_url = "/docs"
openapi_url = "/openapi.json"
cors_origins = ["*"]
enable_correlation_header = true

6. Quickstart Example

from dataclasses import dataclass
from fastapi.testclient import TestClient
from hexastack_core.infra.bootstrap import bootstrap
from hexastack_cqrs.domain.query import Query
from hexastack_cqrs.infra.decorators import query_handler
from hexastack_fastapi.adapters.app import create_app


@dataclass(frozen=True)
class GetGreetingQuery(Query):
    name: str


@query_handler(GetGreetingQuery)
class GetGreetingHandler:
    def __call__(self, qry: GetGreetingQuery) -> dict:
        return {"message": f"Hello, {qry.name}!"}


runtime = bootstrap(packages_to_scan=[__name__])
app = create_app(runtime)

client = TestClient(app)
response = client.get("/health")
print(response.json())  # {"status": "healthy"}

Metadata

Release files for hexastack-fastapi 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hexastack-fastapi 0.4.0
File Size Uploaded
hexastack_fastapi-0.4.0.tar.gz 29.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hexastack-fastapi 0.4.0
File Interpreter ABI Platform
hexastack_fastapi-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 72.9 kB

Release files / hexastack_fastapi-0.4.0.tar.gz

Download URL hexastack_fastapi-0.4.0.tar.gz
Size 29.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f4e010f48059b56591d9279cfb4dc17bc71a9e89e9c054b61a8506c31a6fec39
BLAKE2b-256 checksum
How to use checksums
a474b95a1ccdb463088f1eb32d2297d943ca57e120038dc12ee65dc84de6c3a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hexastack_fastapi-0.4.0-py3-none-any.whl

Download URL hexastack_fastapi-0.4.0-py3-none-any.whl
Size 43.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e4eb94e561061f840a35fa3e3204911e3e5f176f007b5bae02634bd79566cce0
BLAKE2b-256 checksum
How to use checksums
f5a339732211491ee2c98a29585197b5f3a5675b3c294172b6e70f0d902cb206
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release 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