Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/api/client.py
# Copyright (C) 2015-2020 The Software Heritage developers | # Copyright (C) 2015-2020 The Software Heritage developers | ||||
# 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, RemoteException | from swh.core.api import RPCClient, RemoteException | ||||
from .. import HashCollision | from .. import HashCollision | ||||
from ..exc import StorageAPIError, StorageArgumentException | from ..exc import StorageAPIError, StorageArgumentException | ||||
from ..interface import StorageInterface | from ..interface import StorageInterface | ||||
from .serializers import ENCODERS, DECODERS | |||||
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 | ||||
reraise_exceptions = [ | reraise_exceptions = [ | ||||
StorageArgumentException, | StorageArgumentException, | ||||
] | ] | ||||
extra_type_decoders = DECODERS | |||||
extra_type_encoders = ENCODERS | |||||
def raise_for_status(self, response) -> None: | def raise_for_status(self, response) -> None: | ||||
try: | try: | ||||
super().raise_for_status(response) | super().raise_for_status(response) | ||||
except RemoteException as e: | except RemoteException as e: | ||||
if e.response is not None and e.response.status_code == 500 \ | if e.response is not None and e.response.status_code == 500 \ | ||||
and e.args and e.args[0].get('type') == 'HashCollision': | and e.args and e.args[0].get('type') == 'HashCollision': | ||||
# XXX: workaround until we fix these HashCollisions happening | # XXX: workaround until we fix these HashCollisions happening | ||||
Show All 14 Lines |