Source code for pytest_routes.discovery
"""Route discovery from ASGI applications."""
from __future__ import annotations
from typing import Any
from pytest_routes.discovery.base import RouteExtractor, RouteInfo
__all__ = [
"RouteExtractor",
"RouteInfo",
"get_extractor",
]
[docs]
def get_extractor(app: Any) -> RouteExtractor:
"""Get the appropriate route extractor for an ASGI app.
Args:
app: The ASGI application.
Returns:
A RouteExtractor instance that can handle this app.
Raises:
ValueError: If no suitable extractor is found.
"""
from pytest_routes.discovery.litestar import LitestarExtractor
from pytest_routes.discovery.starlette import StarletteExtractor
extractors: list[type[RouteExtractor]] = [
LitestarExtractor,
StarletteExtractor,
]
for extractor_cls in extractors:
extractor = extractor_cls()
if extractor.supports(app):
return extractor
msg = f"No route extractor found for app type: {type(app).__name__}"
raise ValueError(msg)