From 536efe04805737cfdea1094d77424c13b1f57b62 Mon Sep 17 00:00:00 2001 From: mkovalua Date: Thu, 5 Jun 2025 17:28:28 +0300 Subject: [PATCH 1/2] fix for py3.13: don't await aiohttp.request > return await aiohttp.request(method, url, *args, **kwargs) > TypeError: object _SessionRequestContextManager can't be used in > 'await' expression --- mfr/providers/http/provider.py | 24 ++++++++++++------------ mfr/providers/osf/provider.py | 9 ++++++--- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/mfr/providers/http/provider.py b/mfr/providers/http/provider.py index 3de83d05c..62acde32e 100644 --- a/mfr/providers/http/provider.py +++ b/mfr/providers/http/provider.py @@ -29,15 +29,15 @@ async def metadata(self): return provider.ProviderMetadata(name, ext, content_type, unique_key, self.url) async def download(self): - response = await aiohttp.request('GET', self.url) - if response.status >= 400: - err_resp = await response.read() - logger.error('Unable to download file: ({}) {}'.format(response.status, err_resp.decode('utf-8'))) - raise exceptions.DownloadError( - 'Unable to download the requested file, please try again later.', - download_url=self.url, - response=await response.text(), - code=response.status, - provider='http', - ) - return streams.ResponseStreamReader(response) + async with aiohttp.request('GET', self.url) as response: + if response.status >= 400: + err_resp = await response.read() + logger.error('Unable to download file: ({}) {}'.format(response.status, err_resp.decode('utf-8'))) + raise exceptions.DownloadError( + 'Unable to download the requested file, please try again later.', + download_url=self.url, + response=await response.text(), + code=response.status, + provider='http', + ) + return streams.ResponseStreamReader(response) diff --git a/mfr/providers/osf/provider.py b/mfr/providers/osf/provider.py index 99affc9fd..226817188 100644 --- a/mfr/providers/osf/provider.py +++ b/mfr/providers/osf/provider.py @@ -150,8 +150,9 @@ async def download(self): self.metrics.add('download.saw_redirect', False) if response.status in (302, 301): await response.release() - response = await aiohttp.request('GET', response.headers['location']) - self.metrics.add('download.saw_redirect', True) + async with aiohttp.request('GET', self.url) as response: + self.metrics.add('download.saw_redirect', True) + return streams.ResponseStreamReader(response) return streams.ResponseStreamReader(response) @@ -205,4 +206,6 @@ async def _make_request(self, method, url, *args, **kwargs): if self.authorization: kwargs.setdefault('headers', {})['Authorization'] = 'Bearer ' + self.token - return await aiohttp.request(method, url, *args, **kwargs) + async with aiohttp.request(method, url, *args, **kwargs) as response: + return response + From 715b3de006675eb50c53d2c5b6162802848aa99f Mon Sep 17 00:00:00 2001 From: mkovalua Date: Thu, 5 Jun 2025 21:10:10 +0300 Subject: [PATCH 2/2] Todo: for possible agent lib removal --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 9e7ecea48..5a8a51a9f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,6 +11,7 @@ tornado==6.4.2 # WaterButler git+https://github.com/CenterForOpenScience/waterbutler.git@feature/buff-worms +# Todo: have not seen explicit 'agent' lib usage or dependency in MFR and WB for now, maybe it is worth to remove it agent==0.1.2 google-auth==2.38.0