Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/api/client.py
# Copyright (C) 2015-2017 The Software Heritage developers | # Copyright (C) 2015-2017 The Software Heritage developers | ||||
ardumont: copyright update missing. | |||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from swh.core.api import RPCClient | from swh.core.api import RPCClient, RemoteException | ||||
from ..exc import StorageAPIError | from .. import HashCollision | ||||
from ..exc import StorageAPIError, StorageArgumentException | |||||
from ..interface import StorageInterface | from ..interface import StorageInterface | ||||
class RemoteStorage(RPCClient): | class RemoteStorage(RPCClient): | ||||
"""Proxy to a remote storage API""" | """Proxy to a remote storage API""" | ||||
api_exception = StorageAPIError | api_exception = StorageAPIError | ||||
backend_class = StorageInterface | backend_class = StorageInterface | ||||
def raise_for_status(self, response) -> None: | |||||
try: | |||||
super().raise_for_status(response) | |||||
except RemoteException as e: | |||||
if e.response and e.response.status_code == 400: | |||||
assert e.args[0]['type'] \ | |||||
== 'StorageArgumentException' | |||||
raise StorageArgumentException( | |||||
*e.args[0]['args']) | |||||
elif e.response and e.response.status_code == 500 and e.args \ | |||||
and e.args[0].get('type') == 'HashCollision': | |||||
# XXX: workaround until we fix these HashCollisions happening | |||||
# when they shouldn't | |||||
raise HashCollision( | |||||
*e.args[0]['args']) | |||||
else: | |||||
print(e.args) | |||||
ardumontUnsubmitted Not Done Inline Actionsplease, remove the print statement ardumont: please, remove the print statement | |||||
raise | |||||
def reset(self): | def reset(self): | ||||
return self.post('reset', {}) | return self.post('reset', {}) | ||||
def stat_counters(self): | def stat_counters(self): | ||||
return self.get('stat/counters') | return self.get('stat/counters') | ||||
def refresh_stat_counters(self): | def refresh_stat_counters(self): | ||||
return self.get('stat/refresh') | return self.get('stat/refresh') |
copyright update missing.