Skip to content

presentation.routers.api.v1.routes.generator

src.presentation.routers.api.v1.routes.generator

Route generator for the API Route Registry.

This module provides register_routes_from_registry(), which generates FastAPI routes from RouteMetadata entries at application startup. It's the core of the Registry Pattern, converting declarative metadata into runtime routes.

Functions:

Name Description
register_routes_from_registry

Generate all routes from registry

_build_dependencies

Build FastAPI dependencies from auth policy

_build_responses

Build OpenAPI responses dict from error specs

Usage

from src.presentation.routers.api.v1.routes.registry import ROUTE_REGISTRY from src.presentation.routers.api.v1.routes.generator import register_routes_from_registry

v1_router = APIRouter(prefix="/api/v1") register_routes_from_registry(v1_router, ROUTE_REGISTRY)

Reference
  • docs/architecture/registry-pattern-architecture.md

Classes

Functions

register_routes_from_registry

register_routes_from_registry(
    router: APIRouter, registry: list[RouteMetadata]
) -> None

Generate FastAPI routes from registry metadata.

This function converts declarative RouteMetadata entries into runtime FastAPI routes using router.add_api_route(). It handles: - HTTP method and path - Handler function reference - Request/response models - Status codes - OpenAPI documentation (summary, description, operation_id) - Error responses - Auth dependencies (based on auth_policy)

Parameters:

Name Type Description Default
router APIRouter

FastAPI APIRouter to register routes on

required
registry list[RouteMetadata]

List of RouteMetadata entries to convert into routes

required
Example

from fastapi import APIRouter from src.presentation.routers.api.v1.routes.registry import ROUTE_REGISTRY

v1_router = APIRouter(prefix="/api/v1") register_routes_from_registry(v1_router, ROUTE_REGISTRY)

Now v1_router has 36 routes registered
Reference
  • docs/architecture/registry-pattern-architecture.md
Source code in src/presentation/routers/api/v1/routes/generator.py
def register_routes_from_registry(
    router: APIRouter,
    registry: list[RouteMetadata],
) -> None:
    """Generate FastAPI routes from registry metadata.

    This function converts declarative RouteMetadata entries into runtime FastAPI
    routes using router.add_api_route(). It handles:
    - HTTP method and path
    - Handler function reference
    - Request/response models
    - Status codes
    - OpenAPI documentation (summary, description, operation_id)
    - Error responses
    - Auth dependencies (based on auth_policy)

    Args:
        router: FastAPI APIRouter to register routes on
        registry: List of RouteMetadata entries to convert into routes

    Example:
        >>> from fastapi import APIRouter
        >>> from src.presentation.routers.api.v1.routes.registry import ROUTE_REGISTRY
        >>>
        >>> v1_router = APIRouter(prefix="/api/v1")
        >>> register_routes_from_registry(v1_router, ROUTE_REGISTRY)
        >>> # Now v1_router has 36 routes registered

    Reference:
        - docs/architecture/registry-pattern-architecture.md
    """
    for metadata in registry:
        # Build dependencies based on auth policy
        dependencies = _build_dependencies(metadata.auth_policy)

        # Build OpenAPI responses from error specs
        responses = _build_responses(metadata.errors) if metadata.errors else None

        # Register route with FastAPI
        router.add_api_route(
            path=metadata.path,
            endpoint=metadata.handler,
            methods=[metadata.method.value],
            response_model=metadata.response_model,
            status_code=metadata.status_code,
            tags=list(metadata.tags),  # Convert Sequence to list for FastAPI
            summary=metadata.summary,
            description=metadata.description,
            operation_id=metadata.operation_id,
            responses=responses,
            dependencies=dependencies,
            deprecated=metadata.deprecated,
        )