Parameter [overwrite] is supported when adding a route. ps: @bp1.route(/abc, overwrite=True)
This commit is contained in:
parent
af67801062
commit
e970697c7b
|
@ -305,6 +305,16 @@ class Blueprint(BaseSanic):
|
||||||
listeners = defaultdict(list)
|
listeners = defaultdict(list)
|
||||||
registered = set()
|
registered = set()
|
||||||
|
|
||||||
|
# Get routes by (uri, overwirting)
|
||||||
|
_overwritten_routes = {(_future.uri, _future.overwrite): _future
|
||||||
|
for _future in self._future_routes}
|
||||||
|
for _key, _future in _overwritten_routes.items():
|
||||||
|
if _future.overwrite:
|
||||||
|
# Find same route if overwritten, remove it from "route set"
|
||||||
|
_other_same_route = _overwritten_routes.get((_future.uri, False))
|
||||||
|
if _other_same_route:
|
||||||
|
self._future_routes.remove(_other_same_route)
|
||||||
|
|
||||||
# Routes
|
# Routes
|
||||||
for future in self._future_routes:
|
for future in self._future_routes:
|
||||||
# Prepend the blueprint URI prefix if available
|
# Prepend the blueprint URI prefix if available
|
||||||
|
@ -348,6 +358,7 @@ class Blueprint(BaseSanic):
|
||||||
version_prefix,
|
version_prefix,
|
||||||
error_format,
|
error_format,
|
||||||
future.route_context,
|
future.route_context,
|
||||||
|
future.overwrite, # 补充overwrite参数
|
||||||
)
|
)
|
||||||
|
|
||||||
if (self, apply_route) in app._future_registry:
|
if (self, apply_route) in app._future_registry:
|
||||||
|
|
|
@ -97,6 +97,7 @@ class RouteMixin(BaseMixin, metaclass=SanicMeta):
|
||||||
if not methods and not websocket:
|
if not methods and not websocket:
|
||||||
methods = frozenset({"GET"})
|
methods = frozenset({"GET"})
|
||||||
|
|
||||||
|
overwrite = ctx_kwargs.pop("overwrite", False)
|
||||||
route_context = self._build_route_context(ctx_kwargs)
|
route_context = self._build_route_context(ctx_kwargs)
|
||||||
|
|
||||||
def decorator(handler):
|
def decorator(handler):
|
||||||
|
@ -113,6 +114,7 @@ class RouteMixin(BaseMixin, metaclass=SanicMeta):
|
||||||
nonlocal static
|
nonlocal static
|
||||||
nonlocal version_prefix
|
nonlocal version_prefix
|
||||||
nonlocal error_format
|
nonlocal error_format
|
||||||
|
nonlocal overwrite
|
||||||
|
|
||||||
if isinstance(handler, tuple):
|
if isinstance(handler, tuple):
|
||||||
# if a handler fn is already wrapped in a route, the handler
|
# if a handler fn is already wrapped in a route, the handler
|
||||||
|
@ -158,6 +160,7 @@ class RouteMixin(BaseMixin, metaclass=SanicMeta):
|
||||||
version_prefix,
|
version_prefix,
|
||||||
error_format,
|
error_format,
|
||||||
route_context,
|
route_context,
|
||||||
|
overwrite
|
||||||
)
|
)
|
||||||
|
|
||||||
self._future_routes.add(route)
|
self._future_routes.add(route)
|
||||||
|
|
|
@ -28,6 +28,7 @@ class FutureRoute(NamedTuple):
|
||||||
version_prefix: str
|
version_prefix: str
|
||||||
error_format: Optional[str]
|
error_format: Optional[str]
|
||||||
route_context: HashableDict
|
route_context: HashableDict
|
||||||
|
overwrite: bool = False
|
||||||
|
|
||||||
|
|
||||||
class FutureListener(NamedTuple):
|
class FutureListener(NamedTuple):
|
||||||
|
|
|
@ -81,6 +81,7 @@ class Router(BaseRouter):
|
||||||
static: bool = False,
|
static: bool = False,
|
||||||
version_prefix: str = "/v",
|
version_prefix: str = "/v",
|
||||||
error_format: Optional[str] = None,
|
error_format: Optional[str] = None,
|
||||||
|
overwrite: bool = False,
|
||||||
) -> Union[Route, List[Route]]:
|
) -> Union[Route, List[Route]]:
|
||||||
"""
|
"""
|
||||||
Add a handler to the router
|
Add a handler to the router
|
||||||
|
@ -122,6 +123,7 @@ class Router(BaseRouter):
|
||||||
name=name,
|
name=name,
|
||||||
strict=strict_slashes,
|
strict=strict_slashes,
|
||||||
unquote=unquote,
|
unquote=unquote,
|
||||||
|
overwrite=overwrite,
|
||||||
)
|
)
|
||||||
|
|
||||||
if isinstance(host, str):
|
if isinstance(host, str):
|
||||||
|
@ -150,6 +152,7 @@ class Router(BaseRouter):
|
||||||
route.extra.hosts = hosts
|
route.extra.hosts = hosts
|
||||||
route.extra.static = static
|
route.extra.static = static
|
||||||
route.extra.error_format = error_format
|
route.extra.error_format = error_format
|
||||||
|
route.extra.overwrite = overwrite
|
||||||
|
|
||||||
if error_format:
|
if error_format:
|
||||||
check_error_format(route.extra.error_format)
|
check_error_format(route.extra.error_format)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user