Skip to content

Commit

Permalink
Warn on duplicate route names (#2525)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahopkins authored Aug 10, 2022
1 parent 2f6f2bf commit 8e9342e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
12 changes: 12 additions & 0 deletions sanic/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -1521,6 +1521,18 @@ async def _startup(self):
self.signalize(self.config.TOUCHUP)
self.finalize()

route_names = [route.name for route in self.router.routes]
duplicates = {
name for name in route_names if route_names.count(name) > 1
}
if duplicates:
names = ", ".join(duplicates)
deprecation(
f"Duplicate route names detected: {names}. In the future, "
"Sanic will enforce uniqueness in route naming.",
23.3,
)

# TODO: Replace in v22.6 to check against apps in app registry
if (
self.__class__._uvloop_setting is not None
Expand Down
19 changes: 19 additions & 0 deletions tests/test_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1266,3 +1266,22 @@ async def handler(request: Request):

assert request.route.ctx.foo() == "foo"
assert await request.route.ctx.bar() == 99


@pytest.mark.asyncio
async def test_duplicate_route_deprecation(app):
@app.route("/foo", name="duped")
async def handler_foo(request):
return text("...")

@app.route("/bar", name="duped")
async def handler_bar(request):
return text("...")

message = (
r"\[DEPRECATION v23\.3\] Duplicate route names detected: "
r"test_duplicate_route_deprecation\.duped\. In the future, "
r"Sanic will enforce uniqueness in route naming\."
)
with pytest.warns(DeprecationWarning, match=message):
await app._startup()

0 comments on commit 8e9342e

Please sign in to comment.