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(...)).
  • 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 and logs HTTP request lifecycles.
  • 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
├── adapters/        # create_app, routing decorators, health endpoints, db_session middleware, dependencies, NiceGUI UI adapter
└── infra/           # FastApiBootstrapper (order=30), exception handlers, correlation/logging middlewares

Key Exports

Category Exports
Application Factory create_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
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.2.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.2.0
File Size Uploaded
hexastack_fastapi-0.2.0.tar.gz 28.4 kB Details

Built distribution (wheel)

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

Total release size: 68.5 kB

Release files / hexastack_fastapi-0.2.0.tar.gz

Download URL hexastack_fastapi-0.2.0.tar.gz
Size 28.4 kB
Tags Source
SHA-256 checksum
How to use checksums
8eed4595077ade2dbc30a9491ab09b5b5c33446ee613e9f0b9f5554d52e6acbb
BLAKE2b-256 checksum
How to use checksums
03e6b33435356fe23666ecf92ea3549670e65dfa825c84b1e0f642d5ab6551d6
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.2.0-py3-none-any.whl

Download URL hexastack_fastapi-0.2.0-py3-none-any.whl
Size 40.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fe840aa1a30cee06fe0f628e2f8969cedd54a47d002764ab6433f5151028bf67
BLAKE2b-256 checksum
How to use checksums
cfb88f6ad2394bf33acd179df608c3995610e7769472fe301bb48c9a201fb0ec
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

0.4.0

2 release files

0.3.0

2 release files

This release

0.2.0 This release

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