forked from orbit-oss/flask
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.
|
#: blueprint.
|
||||||
self.url_prefix = url_prefix
|
self.url_prefix = url_prefix
|
||||||
|
|
||||||
|
self.name = self.options.get("name", blueprint.name)
|
||||||
self.name_prefix = self.options.get("name_prefix", "")
|
self.name_prefix = self.options.get("name_prefix", "")
|
||||||
|
|
||||||
#: A dictionary with URL defaults that is added to each and every
|
#: A dictionary with URL defaults that is added to each and every
|
||||||
|
|
@ -96,9 +97,10 @@ class BlueprintSetupState:
|
||||||
defaults = self.url_defaults
|
defaults = self.url_defaults
|
||||||
if "defaults" in options:
|
if "defaults" in options:
|
||||||
defaults = dict(defaults, **options.pop("defaults"))
|
defaults = dict(defaults, **options.pop("defaults"))
|
||||||
|
|
||||||
self.app.add_url_rule(
|
self.app.add_url_rule(
|
||||||
rule,
|
rule,
|
||||||
f"{self.name_prefix}.{self.blueprint.name}.{endpoint}".lstrip("."),
|
f"{self.name_prefix}.{self.name}.{endpoint}".lstrip("."),
|
||||||
view_func,
|
view_func,
|
||||||
defaults=defaults,
|
defaults=defaults,
|
||||||
**options,
|
**options,
|
||||||
|
|
|
||||||
|
|
@ -889,3 +889,25 @@ def test_self_registration(app, client) -> None:
|
||||||
bp = flask.Blueprint("bp", __name__)
|
bp = flask.Blueprint("bp", __name__)
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
bp.register_blueprint(bp)
|
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