"""Base adapter protocol shared by all source adapters.""" from __future__ import annotations from collections.abc import Iterator from typing import Protocol class SourceAdapter(Protocol): """A source adapter fetches raw product records from one data source.""" #: Stable identifier of the source, e.g. "openfoodfacts". source_name: str def fetch(self) -> Iterator[dict]: """Yield raw product records as dictionaries.""" ...