def append(self: _RouterSelf, route: BaseRoute) -> _RouterSelf: if isinstance(route, HttpRoute): radix_tree = self.http_tree routes = self.http_routes elif isinstance(route, SocketRoute): radix_tree = self.websocket_tree routes = self.websocket_routes else: raise TypeError( f"Need type: `HttpRoute` or `SocketRoute`, but got type: {type(route)}" ) if route.path == "": route.path = "/" if route.name in routes: raise ValueError(f"Duplicate route name: {route.name}") radix_tree.append(route.path, route.endpoint) path_format, path_convertors = compile_path(route.path) if route.name: # name not in ("", None) routes[route.name] = (path_format, path_convertors, route.endpoint) return self
def append(self, path: str, endpoint: Callable) -> None: if path[0] != "/": raise ValueError('path must start with "/"') path_format, param_convertors = compile_path(path) point = append(self.root, path_format[1:], param_convertors) if point.route is not None: raise ValueError(f"Routing conflict: {path}") point.route = (path_format, param_convertors, endpoint)
def append(self, path: str, endpoint: Callable) -> None: if path[0] != "/": raise ValueError('path must start with "/"') path_format, param_convertors = compile_path(path) if path_format == path and self.search(path) != (None, None): raise ValueError( f"This constant route {path} can be matched by the added routes." ) point = append(self.root, path_format[1:], param_convertors) if point.route is not None: raise ValueError(f"Routing conflict: {path}") point.route = (path_format, param_convertors, endpoint)
def test_compile_path_error(): with pytest.raises(ValueError): compile_path("/{id:integer}")