-
Notifications
You must be signed in to change notification settings - Fork 11
Description
Problem
There seems to be an unexpected behavior when mixing paths with trailing slashes and a route with a path/regex parameter. When creating an app with strict_slashes=False
, one would expect that static routes will match paths with and without the trailing slash as a top priority. But paths with a trailing slash are actually a "last resource" when looking for a matching route.
Code snippet
from sanic import Sanic, response
app = Sanic("MyApp", strict_slashes=False)
async def hello_world(request, *args, **kwargs):
return response.text('Hello World!')
async def catch_all(request, path):
return response.text(f'Caught one: {path}')
app.add_route(hello_world, '/hello/') # same behavior using '/hello'
app.add_route(catch_all, '/<path:path>')
if __name__ == '__main__':
app.run(port=8080)
Expected behavior
Because strict_slashes=False
, the hello_world
route is supposed to match both /hello
and /hello/
. But the latter is being matched with the catch_all
route.
Looks like this is happening due to how the resolve
method works rigt now: https://github.com/sanic-org/sanic-routing/blob/main/sanic_routing/router.py#L92; it's looking for the route with the trailing slash only when no other route would match.
Sanic version
- Sanic v23.6.0
- sanic-routing==23.6.0