Skip to content

Commit 71cfea1

Browse files
TomBaxterfelliott
authored andcommitted
catch OSF metadata request failures earlier
* Explicitly test for error responses and raise an exception if something other than 200. Sentry was reporting KeyErrors as the underlying cause, which is not the case. [SVCS-233]
1 parent 9b3f0e3 commit 71cfea1

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

mfr/providers/osf/provider.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,25 +64,28 @@ async def metadata(self):
6464
# TODO Remove this when API v0 is officially deprecated
6565
self.metrics.add('metadata.wb_api', 'v0')
6666
metadata_url = download_url.replace('/file?', '/data?', 1)
67-
metadata_request = await self._make_request('GET', metadata_url)
68-
metadata = await metadata_request.json()
67+
metadata_response = await self._make_request('GET', metadata_url)
68+
metadata = await metadata_response.json()
6969
else:
7070
# URL is for WaterButler v1 API
7171
self.metrics.add('metadata.wb_api', 'v1')
72-
metadata_request = await self._make_request('HEAD', download_url)
73-
# To make changes to current code as minimal as possible
74-
try:
75-
metadata = {'data': json.loads(metadata_request.headers['x-waterbutler-metadata'])['attributes']}
76-
await metadata_request.release()
77-
except KeyError:
72+
metadata_response = await self._make_request('HEAD', download_url)
73+
response_code = metadata_response.status
74+
response_reason = metadata_response.reason
75+
response_headers = metadata_response.headers
76+
await metadata_response.release()
77+
if response_code != 200:
7878
raise exceptions.MetadataError(
79-
'Failed to fetch metadata. Received response '
80-
'code {}'.format(str(metadata_request.status)),
79+
'Failed to fetch file metadata from WaterButler. Received response: ',
80+
'code {} {}'.format(str(response_code), str(response_reason)),
8181
metadata_url=download_url,
82-
response=await metadata_request.text(),
82+
response=response_reason,
8383
provider=self.NAME,
84-
code=400,
84+
code=400
8585
)
86+
87+
try:
88+
metadata = {'data': json.loads(response_headers['x-waterbutler-metadata'])['attributes']}
8689
except ContentEncodingError:
8790
pass # hack: aiohttp tries to unzip empty body when Content-Encoding is set
8891

0 commit comments

Comments
 (0)