Source code for swh.objstorage.multiplexer.filter.filter
# Copyright (C) 2015-2016 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
from typing import Iterator
from swh.objstorage.interface import CompositeObjId
from swh.objstorage.objstorage import ObjStorage
[docs]
class ObjStorageFilter(ObjStorage):
"""Base implementation of a filter that allow inputs on ObjStorage or
not.
This class copy the API of ...objstorage in order to filter the
inputs of this class.
If the operation is allowed, return the result of this operation
applied to the destination implementation. Otherwise, just return
without any operation.
This class is an abstract base class for a classic read/write
storage. Filters can inherit from it and only redefine some
methods in order to change behavior.
"""
def __init__(self, storage):
self.storage = storage
[docs]
def check_config(self, *, check_write):
"""Check the object storage for proper configuration.
Args:
check_write: check whether writes to the objstorage will succeed
Returns:
True if the storage is properly configured
"""
return self.storage.check_config(check_write=check_write)
def __contains__(self, *args, **kwargs):
return self.storage.__contains__(*args, **kwargs)
def __iter__(self) -> Iterator[CompositeObjId]:
"""Iterates over the content of each storages
Warning: The `__iter__` methods frequently have bad performance. You
almost certainly don't want to use this method in production as the
wrapped storage may cause performance issues.
"""
return self.storage.__iter__()
def __len__(self):
"""Compute the number of objects in the current object storage.
Warning: performance issue in `__iter__` also applies here.
Returns:
number of objects contained in the storage.
"""
return self.storage.__len__()
[docs]
def add(self, content, obj_id, check_presence=True, *args, **kwargs):
return self.storage.add(content, obj_id, check_presence, *args, **kwargs)
[docs]
def restore(self, content, obj_id, *args, **kwargs):
return self.storage.restore(content, obj_id, *args, **kwargs)
[docs]
def get(self, obj_id, *args, **kwargs):
return self.storage.get(obj_id, *args, **kwargs)
[docs]
def check(self, obj_id, *args, **kwargs):
return self.storage.check(obj_id, *args, **kwargs)
[docs]
def delete(self, obj_id, *args, **kwargs):
return self.storage.delete(obj_id, *args, **kwargs)