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, RouteMetadata
Dependencies get_container, get_pipeline, get_feature_flags, require_feature
Documentation Mounting mount_zensical_docs, DocumentationNotFoundError, ZensicalDocsConfig
Exception Handlers register_exception_handlers, domain_exception_handler
Middlewares DbSessionMiddleware, AsyncDbSessionMiddleware, add_db_session_middleware, CorrelationMiddleware, HttpLoggingMiddleware
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.1.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.1.0
File Size Uploaded
hexastack_fastapi-0.1.0.tar.gz 25.4 kB Details

Built distribution (wheel)

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

Total release size: 61.9 kB

Release files / hexastack_fastapi-0.1.0.tar.gz

Download URL hexastack_fastapi-0.1.0.tar.gz
Size 25.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d25107c4578d4f3bdded5665906a1d60ed76792102acdddb5fa245db514973bb
BLAKE2b-256 checksum
How to use checksums
72aa6fefb08edb62e991722e0869cdbf26ff41b97c3debf724b64695b9f80316
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

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

Download URL hexastack_fastapi-0.1.0-py3-none-any.whl
Size 36.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d34a46465049ab5868469952f53bf5bf53cf4a15b2abba66f8d7035dd59e0a4
BLAKE2b-256 checksum
How to use checksums
e2df3a5aee03cf8035584902d97cb844e55a4d391cda9780ac03eb8736ffa9b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

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

0.2.0

2 release files

This release

0.1.0 This release

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