diff --git a/CHANGELOG b/CHANGELOG index 42eceaf1d..a1e6c7ce2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,10 @@ ChangeLog ********* +0.40.2 (2018-08-08) +=================== +- Fix: Fix download of public figshare files. + 0.40.1 (2018-07-25) =================== - Feature: Add `X-CSRFToken` to list of acceptable CORS headers. diff --git a/tests/providers/figshare/test_provider.py b/tests/providers/figshare/test_provider.py index 2b9eb14b1..cdcc38aa5 100644 --- a/tests/providers/figshare/test_provider.py +++ b/tests/providers/figshare/test_provider.py @@ -1249,7 +1249,7 @@ async def test_article_download_404(self, article_provider, root_provider_fixtur with pytest.raises(exceptions.DownloadError) as e: await article_provider.download(path) - assert e.value.code == 403 + assert e.value.code == 404 assert e.value.message == 'Download not available' @pytest.mark.asyncio diff --git a/waterbutler/providers/figshare/provider.py b/waterbutler/providers/figshare/provider.py index d8d4f30ce..b5c8204b2 100644 --- a/waterbutler/providers/figshare/provider.py +++ b/waterbutler/providers/figshare/provider.py @@ -5,6 +5,8 @@ from typing import Tuple from http import HTTPStatus +import aiohttp + from waterbutler.core.streams import CutoffStream from waterbutler.core import exceptions, provider, streams @@ -190,10 +192,20 @@ async def download(self, path: FigsharePath, # type: ignore download_url, range=range, params=params, + allow_redirects=False, ) - if resp.status == 404: + + if resp.status >= 400: await resp.release() - raise exceptions.DownloadError('Download not available', code=HTTPStatus.FORBIDDEN) + raise exceptions.DownloadError('Download not available', code=resp.status) + + if resp.status in (302, 301): + await resp.release() + if range: + resp = await aiohttp.request('GET', resp.headers['location'], + headers={'Range': self._build_range_header(range)}) + else: + resp = await aiohttp.request('GET', resp.headers['location']) return streams.ResponseStreamReader(resp) diff --git a/waterbutler/version.py b/waterbutler/version.py index 5e1c3f39f..b22856464 100644 --- a/waterbutler/version.py +++ b/waterbutler/version.py @@ -1 +1 @@ -__version__ = '0.40.1' +__version__ = '0.40.2'