Fix blueprint renaming
This ensures that if a blueprint is renamed at the time of registration that name is used when constructing endpoints, as expected.
This commit is contained in:
parent
714b0a467a
commit
3257b7574e
2 changed files with 25 additions and 1 deletions
|
|
@ -67,6 +67,7 @@ class BlueprintSetupState:
|
|||
#: blueprint.
|
||||
self.url_prefix = url_prefix
|
||||
|
||||
self.name = self.options.get("name", blueprint.name)
|
||||
self.name_prefix = self.options.get("name_prefix", "")
|
||||
|
||||
#: A dictionary with URL defaults that is added to each and every
|
||||
|
|
@ -96,9 +97,10 @@ class BlueprintSetupState:
|
|||
defaults = self.url_defaults
|
||||
if "defaults" in options:
|
||||
defaults = dict(defaults, **options.pop("defaults"))
|
||||
|
||||
self.app.add_url_rule(
|
||||
rule,
|
||||
f"{self.name_prefix}.{self.blueprint.name}.{endpoint}".lstrip("."),
|
||||
f"{self.name_prefix}.{self.name}.{endpoint}".lstrip("."),
|
||||
view_func,
|
||||
defaults=defaults,
|
||||
**options,
|
||||
|
|
|
|||
|
|
@ -889,3 +889,25 @@ def test_self_registration(app, client) -> None:
|
|||
bp = flask.Blueprint("bp", __name__)
|
||||
with pytest.raises(ValueError):
|
||||
bp.register_blueprint(bp)
|
||||
|
||||
|
||||
def test_blueprint_renaming(app, client) -> None:
|
||||
bp = flask.Blueprint("bp", __name__)
|
||||
bp2 = flask.Blueprint("bp2", __name__)
|
||||
|
||||
@bp.get("/")
|
||||
def index():
|
||||
return flask.request.endpoint
|
||||
|
||||
@bp2.get("/")
|
||||
def index2():
|
||||
return flask.request.endpoint
|
||||
|
||||
bp.register_blueprint(bp2, url_prefix="/a", name="sub")
|
||||
app.register_blueprint(bp, url_prefix="/a")
|
||||
app.register_blueprint(bp, url_prefix="/b", name="alt")
|
||||
|
||||
assert client.get("/a/").data == b"bp.index"
|
||||
assert client.get("/b/").data == b"alt.index"
|
||||
assert client.get("/a/a/").data == b"bp.sub.index2"
|
||||
assert client.get("/b/a/").data == b"alt.sub.index2"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue