google styled doc

This commit is contained in:
2026-03-08 00:29:23 +05:30
parent 37b892f695
commit f03e250763
7 changed files with 261 additions and 447 deletions

View File

@@ -1,36 +1,33 @@
"""
openapi_first.binder
============================
OpenAPI-driven route binding for FastAPI.
---
## Summary
This module is responsible for translating an OpenAPI 3.x specification
into concrete FastAPI routes. It enforces a strict one-to-one mapping
between OpenAPI operations and Python handler functions using operationId.
Core responsibility
-------------------
- Read path + method definitions from an OpenAPI specification
- Resolve each operationId to a Python callable
- Register routes with FastAPI using APIRoute
- Fail fast when contract violations are detected
Notes:
**Core Responsibility:**
Design constraints
------------------
- All routes MUST be declared in the OpenAPI specification.
- All OpenAPI operations MUST define an operationId.
- Every operationId MUST resolve to a handler function.
- Handlers are plain Python callables (no decorators required).
- No implicit route creation or inference is allowed.
- Read path + method definitions from an OpenAPI specification
- Resolve each operationId to a Python callable
- Register routes with FastAPI using APIRoute
- Fail fast when contract violations are detected
This module intentionally does NOT:
-------------------------------
- Perform request or response validation
- Generate Pydantic models
- Modify FastAPI dependency injection
- Interpret OpenAPI semantics beyond routing metadata
**Design Constraints:**
Those concerns belong to other layers or tooling.
- All routes MUST be declared in the OpenAPI specification
- All OpenAPI operations MUST define an operationId
- Every operationId MUST resolve to a handler function
- Handlers are plain Python callables (no decorators required)
- No implicit route creation or inference is allowed
**Constraints:**
- This module intentionally does NOT: Perform request or response validation, generate Pydantic models, modify FastAPI dependency injection, or interpret OpenAPI semantics beyond routing metadata.
"""
from fastapi.routing import APIRoute
@@ -42,33 +39,27 @@ def bind_routes(app, spec: dict, routes_module) -> None:
"""
Bind OpenAPI operations to FastAPI routes.
Iterates through the OpenAPI specification paths and methods,
resolves each operationId to a handler function, and registers
a corresponding APIRoute on the FastAPI application.
Args:
app (fastapi.FastAPI):
The FastAPI application instance to which routes will be added.
spec (dict):
Parsed OpenAPI 3.x specification dictionary.
routes_module (module):
Python module containing handler functions. Each handler's name MUST exactly match an OpenAPI operationId.
Parameters
----------
app : fastapi.FastAPI
The FastAPI application instance to which routes will be added.
Raises:
MissingOperationHandler:
If an operationId is missing from the spec or if no corresponding handler function exists in the routes module.
spec : dict
Parsed OpenAPI 3.x specification dictionary.
Notes:
**Responsibilities:**
routes_module : module
Python module containing handler functions. Each handler's
name MUST exactly match an OpenAPI operationId.
- Iterates through the OpenAPI specification paths and methods
- Resolves each operationId to a handler function, and registers a corresponding APIRoute on the FastAPI application
Raises
------
MissingOperationHandler
If an operationId is missing from the spec or if no corresponding
handler function exists in the routes module.
**Guarantees:**
Behavior guarantees
-------------------
- Route registration is deterministic and spec-driven.
- No route decorators are required or supported.
- Handler resolution errors surface at application startup.
- Route registration is deterministic and spec-driven. No route decorators are required or supported. Handler resolution errors surface at application startup.
"""
paths = spec.get("paths", {})