Changeset View
Changeset View
Standalone View
Standalone View
swh/core/api/__init__.py
Show First 20 Lines • Show All 244 Lines • ▼ Show 20 Lines | def raise_for_status(self, response) -> None: | ||||
# XXX: unpickling below breaks language-independence and should be | # XXX: unpickling below breaks language-independence and should be | ||||
# replaced by proper language-independent [de]serialization | # replaced by proper language-independent [de]serialization | ||||
status_code = response.status_code | status_code = response.status_code | ||||
status_class = response.status_code // 100 | status_class = response.status_code // 100 | ||||
if status_code == 404: | if status_code == 404: | ||||
raise RemoteException(payload='404 not found', response=response) | raise RemoteException(payload='404 not found', response=response) | ||||
exception = None | |||||
try: | try: | ||||
if status_class == 4: | if status_class == 4: | ||||
data = decode_response(response) | data = decode_response(response) | ||||
raise pickle.loads(data) | exception = pickle.loads(data) | ||||
if status_class == 5: | elif status_class == 5: | ||||
data = decode_response(response) | data = decode_response(response) | ||||
if 'exception_pickled' in data: | if 'exception_pickled' in data: | ||||
raise pickle.loads(data['exception_pickled']) | exception = pickle.loads(data['exception_pickled']) | ||||
else: | else: | ||||
raise RemoteException(payload=data['exception'], | exception = RemoteException(payload=data['exception'], | ||||
response=response) | response=response) | ||||
except (TypeError, pickle.UnpicklingError): | except (TypeError, pickle.UnpicklingError): | ||||
raise RemoteException(payload=data, response=response) | raise RemoteException(payload=data, response=response) | ||||
if exception: | |||||
raise exception from None | |||||
if status_class != 2: | if status_class != 2: | ||||
raise RemoteException( | raise RemoteException( | ||||
payload=f'API HTTP error: {status_code} {response.content}', | payload=f'API HTTP error: {status_code} {response.content}', | ||||
response=response) | response=response) | ||||
def _decode_response(self, response): | def _decode_response(self, response): | ||||
if response.status_code == 404: | if response.status_code == 404: | ||||
return None | return None | ||||
▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines |