Make sure that blueprints with no slash is maintained when applied (#2085)
* Make sure that blueprints with no slash is maintained when applied * Remove unneeded import
This commit is contained in:
parent
4998fd54c0
commit
dfd1787a49
|
@ -85,7 +85,11 @@ class Blueprint(BaseSanic):
|
||||||
self.routes: List[Route] = []
|
self.routes: List[Route] = []
|
||||||
self.statics: List[RouteHandler] = []
|
self.statics: List[RouteHandler] = []
|
||||||
self.strict_slashes = strict_slashes
|
self.strict_slashes = strict_slashes
|
||||||
self.url_prefix = url_prefix
|
self.url_prefix = (
|
||||||
|
url_prefix[:-1]
|
||||||
|
if url_prefix and url_prefix.endswith("/")
|
||||||
|
else url_prefix
|
||||||
|
)
|
||||||
self.version = version
|
self.version = version
|
||||||
self.websocket_routes: List[Route] = []
|
self.websocket_routes: List[Route] = []
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ class RouteMixin:
|
||||||
|
|
||||||
# Fix case where the user did not prefix the URL with a /
|
# Fix case where the user did not prefix the URL with a /
|
||||||
# and will probably get confused as to why it's not working
|
# and will probably get confused as to why it's not working
|
||||||
if not uri.startswith("/"):
|
if not uri.startswith("/") and (uri or hasattr(self, "router")):
|
||||||
uri = "/" + uri
|
uri = "/" + uri
|
||||||
|
|
||||||
if strict_slashes is None:
|
if strict_slashes is None:
|
||||||
|
|
|
@ -1175,3 +1175,59 @@ def test_route_with_bad_named_param(app):
|
||||||
|
|
||||||
with pytest.raises(SanicException):
|
with pytest.raises(SanicException):
|
||||||
app.router.finalize()
|
app.router.finalize()
|
||||||
|
|
||||||
|
|
||||||
|
def test_routes_with_and_without_slash_definitions(app):
|
||||||
|
bar = Blueprint("bar", url_prefix="bar")
|
||||||
|
baz = Blueprint("baz", url_prefix="/baz")
|
||||||
|
fizz = Blueprint("fizz", url_prefix="fizz/")
|
||||||
|
buzz = Blueprint("buzz", url_prefix="/buzz/")
|
||||||
|
|
||||||
|
instances = (
|
||||||
|
(app, "foo"),
|
||||||
|
(bar, "bar"),
|
||||||
|
(baz, "baz"),
|
||||||
|
(fizz, "fizz"),
|
||||||
|
(buzz, "buzz"),
|
||||||
|
)
|
||||||
|
|
||||||
|
for instance, term in instances:
|
||||||
|
route = f"/{term}" if isinstance(instance, Sanic) else ""
|
||||||
|
|
||||||
|
@instance.get(route, strict_slashes=True)
|
||||||
|
def get_without(request):
|
||||||
|
return text(f"{term}_without")
|
||||||
|
|
||||||
|
@instance.get(f"{route}/", strict_slashes=True)
|
||||||
|
def get_with(request):
|
||||||
|
return text(f"{term}_with")
|
||||||
|
|
||||||
|
@instance.post(route, strict_slashes=True)
|
||||||
|
def post_without(request):
|
||||||
|
return text(f"{term}_without")
|
||||||
|
|
||||||
|
@instance.post(f"{route}/", strict_slashes=True)
|
||||||
|
def post_with(request):
|
||||||
|
return text(f"{term}_with")
|
||||||
|
|
||||||
|
app.blueprint(bar)
|
||||||
|
app.blueprint(baz)
|
||||||
|
app.blueprint(fizz)
|
||||||
|
app.blueprint(buzz)
|
||||||
|
|
||||||
|
for _, term in instances:
|
||||||
|
_, response = app.test_client.get(f"/{term}")
|
||||||
|
assert response.status == 200
|
||||||
|
assert response.text == f"{term}_without"
|
||||||
|
|
||||||
|
_, response = app.test_client.get(f"/{term}/")
|
||||||
|
assert response.status == 200
|
||||||
|
assert response.text == f"{term}_with"
|
||||||
|
|
||||||
|
_, response = app.test_client.post(f"/{term}")
|
||||||
|
assert response.status == 200
|
||||||
|
assert response.text == f"{term}_without"
|
||||||
|
|
||||||
|
_, response = app.test_client.post(f"/{term}/")
|
||||||
|
assert response.status == 200
|
||||||
|
assert response.text == f"{term}_with"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user