diff --git a/swh/deposit/client.py b/swh/deposit/client.py --- a/swh/deposit/client.py +++ b/swh/deposit/client.py @@ -169,6 +169,9 @@ self.base_url = url.strip("/") + "/" self.auth = auth + self.session = requests.Session() + if auth: + self.session.auth = auth def do(self, method, url, *args, **kwargs): """Internal method to deal with requests, possibly with basic http @@ -181,13 +184,8 @@ The request's execution """ - method_fn = getattr(requests, method) - - if self.auth: - kwargs["auth"] = self.auth - full_url = urljoin(self.base_url, url.lstrip("/")) - return method_fn(full_url, *args, **kwargs) + return self.session.request(method, full_url, *args, **kwargs) class PrivateApiDepositClient(BaseApiDepositClient): diff --git a/swh/deposit/tests/loader/test_client.py b/swh/deposit/tests/loader/test_client.py --- a/swh/deposit/tests/loader/test_client.py +++ b/swh/deposit/tests/loader/test_client.py @@ -9,6 +9,7 @@ from urllib.parse import urlparse import pytest +from requests import Session from swh.deposit.client import PrivateApiDepositClient from swh.deposit.config import DEPOSIT_STATUS_LOAD_FAILURE, DEPOSIT_STATUS_LOAD_SUCCESS @@ -208,7 +209,7 @@ """Update status """ - mocked_put = mocker.patch("swh.deposit.client.requests.put") + mocked_put = mocker.patch.object(Session, "request") deposit_client = PrivateApiDepositClient(config=CLIENT_TEST_CONFIG) deposit_client.status_update( @@ -216,6 +217,7 @@ ) mocked_put.assert_called_once_with( + "put", "https://nowhere.org/update/status", json={ "status": DEPOSIT_STATUS_LOAD_SUCCESS, @@ -228,12 +230,13 @@ """Reading metadata can fail for some reasons """ - mocked_put = mocker.patch("swh.deposit.client.requests.put") + mocked_put = mocker.patch.object(Session, "request") deposit_client = PrivateApiDepositClient(config=CLIENT_TEST_CONFIG) deposit_client.status_update("/update/status/fail", DEPOSIT_STATUS_LOAD_FAILURE) mocked_put.assert_called_once_with( + "put", "https://nowhere.org/update/status/fail", json={"status": DEPOSIT_STATUS_LOAD_FAILURE,}, )