forked from orbit-oss/flask
parent
fa1ee70668
commit
d7b6c1f670
2 changed files with 56 additions and 0 deletions
|
|
@ -453,6 +453,15 @@ class Blueprint(Scaffold):
|
||||||
for blueprint, bp_options in self._blueprints:
|
for blueprint, bp_options in self._blueprints:
|
||||||
bp_options = bp_options.copy()
|
bp_options = bp_options.copy()
|
||||||
bp_url_prefix = bp_options.get("url_prefix")
|
bp_url_prefix = bp_options.get("url_prefix")
|
||||||
|
bp_subdomain = bp_options.get("subdomain")
|
||||||
|
|
||||||
|
if bp_subdomain is None:
|
||||||
|
bp_subdomain = blueprint.subdomain
|
||||||
|
|
||||||
|
if state.subdomain is not None and bp_subdomain is None:
|
||||||
|
bp_options["subdomain"] = state.subdomain
|
||||||
|
elif bp_subdomain is not None:
|
||||||
|
bp_options["subdomain"] = bp_subdomain
|
||||||
|
|
||||||
if bp_url_prefix is None:
|
if bp_url_prefix is None:
|
||||||
bp_url_prefix = blueprint.url_prefix
|
bp_url_prefix = blueprint.url_prefix
|
||||||
|
|
|
||||||
|
|
@ -950,6 +950,53 @@ def test_nesting_url_prefixes(
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
|
def test_nesting_subdomains(app, client) -> None:
|
||||||
|
subdomain = "api"
|
||||||
|
parent = flask.Blueprint("parent", __name__)
|
||||||
|
child = flask.Blueprint("child", __name__)
|
||||||
|
|
||||||
|
@child.route("/child/")
|
||||||
|
def index():
|
||||||
|
return "child"
|
||||||
|
|
||||||
|
parent.register_blueprint(child)
|
||||||
|
app.register_blueprint(parent, subdomain=subdomain)
|
||||||
|
|
||||||
|
client.allow_subdomain_redirects = True
|
||||||
|
|
||||||
|
domain_name = "domain.tld"
|
||||||
|
app.config["SERVER_NAME"] = domain_name
|
||||||
|
response = client.get("/child/", base_url="http://api." + domain_name)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
|
def test_child_overrides_parent_subdomain(app, client) -> None:
|
||||||
|
child_subdomain = "api"
|
||||||
|
parent_subdomain = "parent"
|
||||||
|
parent = flask.Blueprint("parent", __name__)
|
||||||
|
child = flask.Blueprint("child", __name__, subdomain=child_subdomain)
|
||||||
|
|
||||||
|
@child.route("/")
|
||||||
|
def index():
|
||||||
|
return "child"
|
||||||
|
|
||||||
|
parent.register_blueprint(child)
|
||||||
|
app.register_blueprint(parent, subdomain=parent_subdomain)
|
||||||
|
|
||||||
|
client.allow_subdomain_redirects = True
|
||||||
|
|
||||||
|
domain_name = "domain.tld"
|
||||||
|
app.config["SERVER_NAME"] = domain_name
|
||||||
|
response = client.get("/", base_url=f"http://{child_subdomain}.{domain_name}")
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
response = client.get("/", base_url=f"http://{parent_subdomain}.{domain_name}")
|
||||||
|
|
||||||
|
assert response.status_code == 404
|
||||||
|
|
||||||
|
|
||||||
def test_unique_blueprint_names(app, client) -> None:
|
def test_unique_blueprint_names(app, client) -> None:
|
||||||
bp = flask.Blueprint("bp", __name__)
|
bp = flask.Blueprint("bp", __name__)
|
||||||
bp2 = flask.Blueprint("bp", __name__)
|
bp2 = flask.Blueprint("bp", __name__)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue