Changeset View
Changeset View
Standalone View
Standalone View
swh/objstorage/backends/generator.py
from itertools import count, islice, repeat | from itertools import count, islice, repeat | ||||
import logging | import logging | ||||
import random | import random | ||||
from typing import Iterator, Optional | from typing import Generator, Iterator, Optional, cast | ||||
from swh.objstorage.interface import ObjId | from swh.objstorage.constants import ID_HASH_ALGO | ||||
from swh.objstorage.interface import CompositeObjId, ObjId | |||||
from swh.objstorage.objstorage import DEFAULT_LIMIT, ObjStorage | from swh.objstorage.objstorage import DEFAULT_LIMIT, ObjStorage | ||||
logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||
class Randomizer: | class Randomizer: | ||||
def __init__(self): | def __init__(self): | ||||
self.size = 0 | self.size = 0 | ||||
▲ Show 20 Lines • Show All 169 Lines • ▼ Show 20 Lines | def content_generator(self): | ||||
return self._content_generator | return self._content_generator | ||||
def check_config(self, *, check_write): | def check_config(self, *, check_write): | ||||
return True | return True | ||||
def __contains__(self, obj_id, *args, **kwargs): | def __contains__(self, obj_id, *args, **kwargs): | ||||
return False | return False | ||||
def __iter__(self): | def __iter__(self) -> Iterator[CompositeObjId]: | ||||
i = 1 | i = 1 | ||||
while True: | while True: | ||||
j = yield (b"%d" % i) | j = yield {ID_HASH_ALGO: b"%d" % i} | ||||
if self.total and i >= self.total: | if self.total and i >= self.total: | ||||
logger.debug("DONE") | logger.debug("DONE") | ||||
break | break | ||||
if j is not None: | if j is not None: | ||||
i = j | i = j | ||||
else: | else: | ||||
i += 1 | i += 1 | ||||
def get(self, obj_id, *args, **kwargs): | def get(self, obj_id, *args, **kwargs): | ||||
return next(self.content_generator) | return next(self.content_generator) | ||||
def add(self, content, obj_id, check_presence=True, *args, **kwargs): | def add(self, content, obj_id, check_presence=True, *args, **kwargs): | ||||
pass | pass | ||||
def check(self, obj_id, *args, **kwargs): | def check(self, obj_id, *args, **kwargs): | ||||
return True | return True | ||||
def delete(self, obj_id, *args, **kwargs): | def delete(self, obj_id, *args, **kwargs): | ||||
return True | return True | ||||
def list_content( | def list_content( | ||||
self, | self, | ||||
last_obj_id: Optional[ObjId] = None, | last_obj_id: Optional[ObjId] = None, | ||||
limit: int = DEFAULT_LIMIT, | limit: int = DEFAULT_LIMIT, | ||||
) -> Iterator[ObjId]: | ) -> Iterator[CompositeObjId]: | ||||
it = iter(self) | if isinstance(last_obj_id, dict): | ||||
last_obj_id = last_obj_id[ID_HASH_ALGO] | |||||
it = cast(Generator[CompositeObjId, int, None], iter(self)) | |||||
if last_obj_id: | if last_obj_id: | ||||
next(it) | next(it) | ||||
it.send(int(last_obj_id)) | it.send(int(last_obj_id)) | ||||
return islice(it, limit) | return islice(it, limit) |