diff --git a/starlette/applications.py b/starlette/applications.py index ff88b6951..82e6b607a 100644 --- a/starlette/applications.py +++ b/starlette/applications.py @@ -106,8 +106,9 @@ def build_middleware_stack(self) -> ASGIApp: def routes(self) -> typing.List[BaseRoute]: return self.router.routes - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: - return self.router.url_path_for(name, **path_params) + # TODO: Make `__name` a positional-only argument when we drop Python 3.7 support. + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: + return self.router.url_path_for(__name, **path_params) async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: scope["app"] = self diff --git a/starlette/requests.py b/starlette/requests.py index 3f5a8fd6f..c8b1ec899 100644 --- a/starlette/requests.py +++ b/starlette/requests.py @@ -173,9 +173,9 @@ def state(self) -> State: self._state = State(self.scope["state"]) return self._state - def url_for(self, name: str, **path_params: typing.Any) -> URL: + def url_for(self, __name: str, **path_params: typing.Any) -> URL: router: Router = self.scope["router"] - url_path = router.url_path_for(name, **path_params) + url_path = router.url_path_for(__name, **path_params) return url_path.make_absolute_url(base_url=self.base_url) diff --git a/starlette/routing.py b/starlette/routing.py index 92b81f0bc..696efa51a 100644 --- a/starlette/routing.py +++ b/starlette/routing.py @@ -170,7 +170,7 @@ class BaseRoute: def matches(self, scope: Scope) -> typing.Tuple[Match, Scope]: raise NotImplementedError() # pragma: no cover - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: raise NotImplementedError() # pragma: no cover async def handle(self, scope: Scope, receive: Receive, send: Send) -> None: @@ -249,12 +249,12 @@ def matches(self, scope: Scope) -> typing.Tuple[Match, Scope]: return Match.FULL, child_scope return Match.NONE, {} - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: seen_params = set(path_params.keys()) expected_params = set(self.param_convertors.keys()) - if name != self.name or seen_params != expected_params: - raise NoMatchFound(name, path_params) + if __name != self.name or seen_params != expected_params: + raise NoMatchFound(__name, path_params) path, remaining_params = replace_params( self.path_format, self.param_convertors, path_params @@ -324,12 +324,12 @@ def matches(self, scope: Scope) -> typing.Tuple[Match, Scope]: return Match.FULL, child_scope return Match.NONE, {} - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: seen_params = set(path_params.keys()) expected_params = set(self.param_convertors.keys()) - if name != self.name or seen_params != expected_params: - raise NoMatchFound(name, path_params) + if __name != self.name or seen_params != expected_params: + raise NoMatchFound(__name, path_params) path, remaining_params = replace_params( self.path_format, self.param_convertors, path_params @@ -406,8 +406,8 @@ def matches(self, scope: Scope) -> typing.Tuple[Match, Scope]: return Match.FULL, child_scope return Match.NONE, {} - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: - if self.name is not None and name == self.name and "path" in path_params: + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: + if self.name is not None and __name == self.name and "path" in path_params: # 'name' matches "". path_params["path"] = path_params["path"].lstrip("/") path, remaining_params = replace_params( @@ -415,13 +415,13 @@ def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: ) if not remaining_params: return URLPath(path=path) - elif self.name is None or name.startswith(self.name + ":"): + elif self.name is None or __name.startswith(self.name + ":"): if self.name is None: # No mount name. - remaining_name = name + remaining_name = __name else: # 'name' matches ":". - remaining_name = name[len(self.name) + 1 :] + remaining_name = __name[len(self.name) + 1 :] path_kwarg = path_params.get("path") path_params["path"] = "" path_prefix, remaining_params = replace_params( @@ -437,7 +437,7 @@ def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: ) except NoMatchFound: pass - raise NoMatchFound(name, path_params) + raise NoMatchFound(__name, path_params) async def handle(self, scope: Scope, receive: Receive, send: Send) -> None: await self.app(scope, receive, send) @@ -484,8 +484,8 @@ def matches(self, scope: Scope) -> typing.Tuple[Match, Scope]: return Match.FULL, child_scope return Match.NONE, {} - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: - if self.name is not None and name == self.name and "path" in path_params: + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: + if self.name is not None and __name == self.name and "path" in path_params: # 'name' matches "". path = path_params.pop("path") host, remaining_params = replace_params( @@ -493,13 +493,13 @@ def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: ) if not remaining_params: return URLPath(path=path, host=host) - elif self.name is None or name.startswith(self.name + ":"): + elif self.name is None or __name.startswith(self.name + ":"): if self.name is None: # No mount name. - remaining_name = name + remaining_name = __name else: # 'name' matches ":". - remaining_name = name[len(self.name) + 1 :] + remaining_name = __name[len(self.name) + 1 :] host, remaining_params = replace_params( self.host_format, self.param_convertors, path_params ) @@ -509,7 +509,7 @@ def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: return URLPath(path=str(url), protocol=url.protocol, host=host) except NoMatchFound: pass - raise NoMatchFound(name, path_params) + raise NoMatchFound(__name, path_params) async def handle(self, scope: Scope, receive: Receive, send: Send) -> None: await self.app(scope, receive, send) @@ -634,13 +634,13 @@ async def not_found(self, scope: Scope, receive: Receive, send: Send) -> None: response = PlainTextResponse("Not Found", status_code=404) await response(scope, receive, send) - def url_path_for(self, name: str, **path_params: typing.Any) -> URLPath: + def url_path_for(self, __name: str, **path_params: typing.Any) -> URLPath: for route in self.routes: try: - return route.url_path_for(name, **path_params) + return route.url_path_for(__name, **path_params) except NoMatchFound: pass - raise NoMatchFound(name, path_params) + raise NoMatchFound(__name, path_params) async def startup( self, state: typing.Optional[typing.Dict[str, typing.Any]]