Improve copy method in blueprint, adding possibiliy to keep original attribute values.
This commit is contained in:
parent
46d9ebff4b
commit
69c1a8e2ac
@ -13,6 +13,7 @@ from sanic_routing.route import Route # type: ignore
|
|||||||
from sanic.base import BaseSanic
|
from sanic.base import BaseSanic
|
||||||
from sanic.blueprint_group import BlueprintGroup
|
from sanic.blueprint_group import BlueprintGroup
|
||||||
from sanic.exceptions import SanicException
|
from sanic.exceptions import SanicException
|
||||||
|
from sanic.helpers import _default
|
||||||
from sanic.models.futures import FutureRoute, FutureStatic
|
from sanic.models.futures import FutureRoute, FutureStatic
|
||||||
from sanic.models.handler_types import (
|
from sanic.models.handler_types import (
|
||||||
ListenerType,
|
ListenerType,
|
||||||
@ -148,16 +149,32 @@ class Blueprint(BaseSanic):
|
|||||||
def copy(
|
def copy(
|
||||||
self,
|
self,
|
||||||
name: str,
|
name: str,
|
||||||
url_prefix: str = "",
|
url_prefix: str = _default,
|
||||||
version: Optional[Union[int, str, float]] = None,
|
version: Optional[Union[int, str, float]] = _default,
|
||||||
strict_slashes: Optional[bool] = None,
|
version_prefix: str = _default,
|
||||||
version_prefix: str = "/v",
|
strict_slashes: Optional[bool] = _default,
|
||||||
):
|
):
|
||||||
|
"""
|
||||||
|
Copy a blueprint instance with some optional parameters to
|
||||||
|
override the values of attributes in the old instance.
|
||||||
|
|
||||||
|
:param name: unique name of the blueprint
|
||||||
|
:param url_prefix: URL to be prefixed before all route URLs
|
||||||
|
:param host: IP Address of FQDN for the sanic server to use.
|
||||||
|
:param version: Blueprint Version
|
||||||
|
:param version_prefix: the prefix of the version number shown in the URL.
|
||||||
|
:param strict_slashes: Enforce the API urls are requested with a
|
||||||
|
training */*
|
||||||
|
"""
|
||||||
new_bp = deepcopy(self)
|
new_bp = deepcopy(self)
|
||||||
new_bp.name = name
|
new_bp.name = name
|
||||||
|
if url_prefix != _default:
|
||||||
new_bp.url_prefix = url_prefix
|
new_bp.url_prefix = url_prefix
|
||||||
|
if version != _default:
|
||||||
new_bp.version = version
|
new_bp.version = version
|
||||||
|
if strict_slashes != _default:
|
||||||
new_bp.strict_slashes = strict_slashes
|
new_bp.strict_slashes = strict_slashes
|
||||||
|
if version_prefix != _default:
|
||||||
new_bp.version_prefix = version_prefix
|
new_bp.version_prefix = version_prefix
|
||||||
|
|
||||||
return new_bp
|
return new_bp
|
||||||
|
@ -155,3 +155,17 @@ def import_string(module_name, package=None):
|
|||||||
if ismodule(obj):
|
if ismodule(obj):
|
||||||
return obj
|
return obj
|
||||||
return obj()
|
return obj()
|
||||||
|
|
||||||
|
|
||||||
|
class Default:
|
||||||
|
"""
|
||||||
|
It is used to replace `None` or `object()` as a sentinel
|
||||||
|
that represents a default value. Sometimes we want to set
|
||||||
|
a value to `None` so we cannot use `None` to represent the
|
||||||
|
default value, and `object()` is hard to be typed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
_default = Default()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user