def path(route: str, view: Union[Type[AbstractView], List[RouteDef]], **kwargs): if isinstance(view, (list, tuple)): if not route.endswith('/'): route += '/' def _recursive(items): routes = [] for pattern in items: if not isinstance(pattern, list): routes.append(pattern) else: routes += _recursive(pattern) return routes routes_def = _recursive(view) results = [RouteDef( method=route_def.method, path=(route + route_def.path), handler=route_def.handler, kwargs=route_def.kwargs) for route_def in routes_def] return results elif callable(view): return RouteDef(METH_ANY, route, view, kwargs) else: raise TypeError('view must be a callable or a list/tuple in the case of include().')
def aiohttp_routes(self) -> Iterable[RouteDef]: for route in self.routes: for method in self.methods: kwargs = {"allow_head": False} if method == "GET" else {} yield RouteDef( method=method, path=route, handler=self.handler, kwargs=kwargs, )
def add_routes(self, routes: list[RouteDef], router: Router = None): router = router if router is not None else self.app.router api_url_prefix = AppConfig.get("control_server.api.url_prefix", "/").rstrip("/") for route in routes: route_path = api_url_prefix + route.path log.debug("registering API resource %s %s to %s", route.method, route_path, router) RouteDef(route.method, str(route_path), route.handler, route.kwargs).register(router)
def inner(handler): handler = _handle(handler) self._items.append( RouteDef(method, f"{self.path_prefix}{path}", handler, kwargs)) return handler
def inner(handler: _HandlerType) -> _HandlerType: self._items.append(RouteDef(method, path, handler, kwargs)) self._items.append(RouteDef(hdrs.METH_GET, '/docs' + path, self.get_docs_response(handler), {})) return handler
def inner(handler): self._items.append(RouteDef(method, self.prefix + path, handler, kwargs)) return handler
def route(method: str, path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: return RouteDef(method, path, handlers.wraps(handler), kwargs)