Files
gallery/tests/common/mock.py
T

31 lines
867 B
Python

from pathlib import Path
from typing import TypeVar
from gallery.sketch.api import Api, S
from gallery.sketch.source import DEFAULT_REQUEST_MODE, ApiSource, RequestMode
class MockSource(ApiSource):
def __init__(self, path: Path, mapping: dict[str, str]):
super().__init__("")
self._path = path
self._mapping = mapping
async def request(self, endpoint: str, /, mode: RequestMode = DEFAULT_REQUEST_MODE) -> str:
for pattern, filename in self._mapping.items():
if pattern in endpoint:
return (self._path / filename).read_text()
raise ValueError(endpoint)
API = Api[S]
A = TypeVar("A", bound=API)
def create_mock_api(api_type: type[A], mock_source: MockSource) -> A:
api = api_type()
# pylint: disable=protected-access
api._build_source = lambda: mock_source
return api