Skip to content

Commit

Permalink
Support absolute url to override base url (#10074)
Browse files Browse the repository at this point in the history
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) <wk.cvs.github@sydorenko.org.ua>
  • Loading branch information
3 people authored Dec 2, 2024
1 parent 29c3ca9 commit f733258
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGES/10074.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Added support for overriding the base URL with an absolute one in client sessions
-- by :user:`vivodi`.
1 change: 1 addition & 0 deletions CONTRIBUTORS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ Arseny Timoniq
Artem Yushkovskiy
Arthur Darcet
Austin Scola
Bai Haoran
Ben Bader
Ben Greiner
Ben Kallus
Expand Down
6 changes: 2 additions & 4 deletions aiohttp/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,11 +414,9 @@ def request(

def _build_url(self, str_or_url: StrOrURL) -> URL:
url = URL(str_or_url)
if self._base_url is None:
return url
else:
assert not url.absolute
if self._base_url and not url.absolute:
return self._base_url.join(url)
return url

async def _request(
self,
Expand Down
4 changes: 4 additions & 0 deletions docs/client_reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ The client session supports the context manager protocol for self closing.

.. versionadded:: 3.8

.. versionchanged:: 3.12

Added support for overriding the base URL with an absolute one in client sessions.

:param aiohttp.BaseConnector connector: BaseConnector
sub-class instance to support connection pooling.

Expand Down
18 changes: 18 additions & 0 deletions tests/test_client_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -1140,6 +1140,24 @@ async def test_requote_redirect_url_default_disable() -> None:
URL("http://example.com/test1/test2?q=foo#bar"),
id="base_url=URL('http://example.com/test1/') url='test2?q=foo#bar'",
),
pytest.param(
URL("http://example.com/test1/"),
"http://foo.com/bar",
URL("http://foo.com/bar"),
id="base_url=URL('http://example.com/test1/') url='http://foo.com/bar'",
),
pytest.param(
URL("http://example.com"),
"http://foo.com/bar",
URL("http://foo.com/bar"),
id="base_url=URL('http://example.com') url='http://foo.com/bar'",
),
pytest.param(
URL("http://example.com/test1/"),
"http://foo.com",
URL("http://foo.com"),
id="base_url=URL('http://example.com/test1/') url='http://foo.com'",
),
],
)
async def test_build_url_returns_expected_url(
Expand Down

0 comments on commit f733258

Please sign in to comment.