Routing
The routing module provides utilities for organizing WebSocket routes and patterns, including route discovery and traversal.
Patterns
- chanx.routing.patterns.get_pattern_string_and_params(route: Any) tuple[str, dict[str, str] | None]
Extract pattern string and path parameters from a route object.
Handles different route pattern implementations to extract the URL pattern string and identified named path parameters.
Supports both Django-style path parameters (<type:name>) and regex patterns.
- Parameters:
route -- The route object to extract pattern from.
- Returns:
The cleaned URL pattern string
Dictionary of path parameters with their type/pattern info, or None if no parameters
- Return type:
A tuple containing
- chanx.routing.patterns.extract_path_parameters(pattern: str) dict[str, str]
Extract path parameters from a URL pattern string.
Supports Django, Starlette/FastAPI, and regex-style parameters.
- Parameters:
pattern -- The URL pattern string to extract parameters from.
- Returns:
Dictionary of parameter names to their types/patterns.
- chanx.routing.patterns.DJANGO_PARAM_PATTERN = '<(\\w+):(\\w+)>'
name>.
- Type:
Pattern for Django path parameters like <type
- chanx.routing.patterns.REGEX_PARAM_PATTERN = '\\(\\?P<([^>]+)>([^)]+)\\)'
Pattern for Python regex named groups like (?P<name>pattern).
- chanx.routing.patterns.STARLETTE_PARAM_PATTERN = '\\{(\\w+)(?::(\\w+))?\\}'
type}.
- Type:
Pattern for Starlette/FastAPI path parameters like {name} or {name
Discovery
- class chanx.routing.discovery.RouteInfo(path: str, handler: Any, base_url: str, consumer: type[ChanxWebsocketConsumerMixin], path_params: dict[str, str] | None = None)
Unified WebSocket route information.
This class consolidates the functionality from the previous separate RouteInfo implementations that were duplicated across multiple modules.
- path
The URL path pattern for the WebSocket route.
- Type:
str
- handler
The consumer or handler function for this route.
- Type:
Any
- base_url
The base WebSocket URL (e.g., ws://domain.com).
- Type:
str
- path_params
Dictionary of path parameters with their regex patterns.
- Type:
dict[str, str] | None
- consumer
The WebSocket consumer class (optional).
- Type:
- property channel_path: str
Get a channel path with {param} format for AsyncAPI specification.
This method is used by AsyncAPI generation to create user-friendly path representations.
- class chanx.routing.discovery.RouteDiscovery
Abstract base class for route discovery implementations.
This class defines the interface that framework-specific route discovery implementations must follow. It provides a consistent API for discovering WebSocket routes across different frameworks.
- abstract discover_routes(base_url: str = 'ws://localhost:8000') list[RouteInfo]
Discover all available WebSocket routes.
- Parameters:
base_url -- The base WebSocket URL to use for discovered routes.
- Returns:
List of RouteInfo objects representing discovered routes.
- abstract extract_routes_from_router(router: Any, prefix: str, routes: list[RouteInfo], base_url: str) None
Extract routes from a router object.
This method should be implemented by subclasses to handle framework-specific router objects.
- Parameters:
router -- The router object to extract routes from.
prefix -- URL prefix accumulated so far.
routes -- List to store discovered RouteInfo objects.
base_url -- Base URL for WebSocket connections.
Traversal
- chanx.routing.traversal.traverse_middleware_stack(app: Any, prefix: str, routes: list[RouteInfo], base_url: str, extract_routes_fn: RouteExtractor) None
Generic middleware traversal function.
Recursively explores the middleware stack to find router instances and extract route information from them using the provided extraction function.
This is framework-agnostic and can be used by different routing implementations.
- Parameters:
app -- The current application or middleware to traverse.
prefix -- URL prefix accumulated so far.
routes -- List to store discovered RouteInfo objects.
base_url -- Base URL for WebSocket connections.
extract_routes_fn -- Function to extract routes from router objects.