Minimal AbstractObjectStore for testing.
| 18 | |
| 19 | |
| 20 | class MemoryObjectStore: |
| 21 | """Minimal AbstractObjectStore for testing.""" |
| 22 | |
| 23 | def __init__(self) -> None: |
| 24 | self._store: dict[str, str] = {} |
| 25 | |
| 26 | async def get_string(self, key: str) -> str | None: |
| 27 | return self._store.get(key) |
| 28 | |
| 29 | async def put( |
| 30 | self, key: str, body: str, *, content_type: str | None = None, cache_control: str | None = None |
| 31 | ) -> None: |
| 32 | self._store[key] = body |
| 33 | |
| 34 | async def list_keys( |
| 35 | self, prefix: str, *, start_after: str | None = None, limit: int | None = None |
| 36 | ) -> list[str]: |
| 37 | keys = sorted(k for k in self._store if k.startswith(prefix)) |
| 38 | if start_after: |
| 39 | keys = [k for k in keys if k > start_after] |
| 40 | if limit: |
| 41 | keys = keys[:limit] |
| 42 | return keys |
| 43 | |
| 44 | async def delete(self, key: str) -> None: |
| 45 | self._store.pop(key, None) |
| 46 | |
| 47 | async def delete_many(self, keys: list[str]) -> None: |
| 48 | for k in keys: |
| 49 | self._store.pop(k, None) |
no outgoing calls