Source code for edify.integrations.fastapi
"""FastAPI integration — validate request paths and queries against an edify :class:`Pattern`.
Requires the ``fastapi`` extra: ``pip install edify[fastapi]``. Importing this module
without the framework installed raises :class:`ImportError` at import time.
"""
from __future__ import annotations
from typing import cast
import fastapi
import fastapi.params
from edify.pattern.composition import Pattern
[docs]
def pattern_query(
pattern: Pattern,
default: str | None = None,
description: str | None = None,
) -> fastapi.params.Query:
"""Return a :class:`fastapi.Query` value pinned to ``pattern``.
Args:
pattern: The :class:`edify.Pattern` a query parameter must match anywhere in.
default: Optional default value; when None the parameter is required.
description: Optional OpenAPI description forwarded to :func:`fastapi.Query`.
"""
pattern_source = pattern.to_regex_string()
default_value = default if default is not None else ...
query = fastapi.Query(default_value, pattern=pattern_source, description=description)
return cast(fastapi.params.Query, query)
[docs]
def pattern_path(pattern: Pattern, description: str | None = None) -> fastapi.params.Path:
"""Return a :class:`fastapi.Path` value pinned to ``pattern``.
Args:
pattern: The :class:`edify.Pattern` a path parameter must match anywhere in.
description: Optional OpenAPI description forwarded to :func:`fastapi.Path`.
"""
pattern_source = pattern.to_regex_string()
path = fastapi.Path(..., pattern=pattern_source, description=description)
return cast(fastapi.params.Path, path)