Skip to content

Commit fe982f0

Browse files
committed
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.
1 parent 280a8d4 commit fe982f0

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/flask/blueprints.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def __init__(
6767
#: blueprint.
6868
self.url_prefix = url_prefix
6969

70+
self.name = self.options.get("name", blueprint.name)
7071
self.name_prefix = self.options.get("name_prefix", "")
7172

7273
#: A dictionary with URL defaults that is added to each and every
@@ -96,9 +97,10 @@ def add_url_rule(
9697
defaults = self.url_defaults
9798
if "defaults" in options:
9899
defaults = dict(defaults, **options.pop("defaults"))
100+
99101
self.app.add_url_rule(
100102
rule,
101-
f"{self.name_prefix}.{self.blueprint.name}.{endpoint}".lstrip("."),
103+
f"{self.name_prefix}.{self.name}.{endpoint}".lstrip("."),
102104
view_func,
103105
defaults=defaults,
104106
**options,

tests/test_blueprints.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,3 +889,25 @@ def test_self_registration(app, client) -> None:
889889
bp = flask.Blueprint("bp", __name__)
890890
with pytest.raises(ValueError):
891891
bp.register_blueprint(bp)
892+
893+
894+
def test_blueprint_renaming(app, client) -> None:
895+
bp = flask.Blueprint("bp", __name__)
896+
bp2 = flask.Blueprint("bp2", __name__)
897+
898+
@bp.get("/")
899+
def index():
900+
return flask.request.endpoint
901+
902+
@bp2.get("/")
903+
def index2():
904+
return flask.request.endpoint
905+
906+
bp.register_blueprint(bp2, url_prefix="/a", name="sub")
907+
app.register_blueprint(bp, url_prefix="/a")
908+
app.register_blueprint(bp, url_prefix="/b", name="alt")
909+
910+
assert client.get("/a/").data == b"bp.index"
911+
assert client.get("/b/").data == b"alt.index"
912+
assert client.get("/a/a/").data == b"bp.sub.index2"
913+
assert client.get("/b/a/").data == b"alt.sub.index2"

0 commit comments

Comments
 (0)