From 644f5a3f61c264fba263c891a8ac5ccf3516d756 Mon Sep 17 00:00:00 2001 From: Dmitry Erlikh Date: Thu, 28 Oct 2021 17:58:21 +0200 Subject: [PATCH] Use URL.join() --- aiohttp/client.py | 13 ++++--------- tests/test_client_session.py | 6 ------ 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/aiohttp/client.py b/aiohttp/client.py index 98a8656b2aa..9e8123dceca 100644 --- a/aiohttp/client.py +++ b/aiohttp/client.py @@ -311,13 +311,11 @@ def request( """Perform HTTP request.""" return _RequestContextManager(self._request(method, url, **kwargs)) - def _build_url(self, url: str) -> URL: + def _build_url(self, str_or_url: StrOrURL) -> URL: if self._base_url is None: - return URL(url) - elif url.startswith("/"): - return self._base_url / url[1:] + return URL(str_or_url) else: - raise ValueError("url must start with /") + return self._base_url.join(URL(str_or_url)) async def _request( self, @@ -378,10 +376,7 @@ async def _request( proxy_headers = self._prepare_headers(proxy_headers) try: - if isinstance(str_or_url, URL): - url = str_or_url - else: - url = self._build_url(str_or_url) + url = self._build_url(str_or_url) except ValueError as e: raise InvalidURL(str_or_url) from e diff --git a/tests/test_client_session.py b/tests/test_client_session.py index 8dac3353443..2feb1fb449b 100644 --- a/tests/test_client_session.py +++ b/tests/test_client_session.py @@ -725,12 +725,6 @@ async def test_build_url_returns_expected_url( assert session._build_url(url) == expected_url -async def test_build_url_raises_when_url_not_starts_with_slash(create_session) -> None: - session = await create_session("http://example.com") - with pytest.raises(ValueError, match="url must start with /"): - session._build_url("test") - - async def test_request_uses_base_url_when_url_is_str(create_session) -> None: request_class = mock.MagicMock() session = await create_session("http://example.com", request_class=request_class)