from abc import ABC, abstractmethod import polars as pl class DataSource(ABC): """Base class for all data sources.""" @property @abstractmethod def name(self) -> str: """Unique identifier for this data source.""" pass @abstractmethod def load(self) -> pl.LazyFrame: """Load raw data as LazyFrame.""" pass @abstractmethod def process(self, postcodes: pl.LazyFrame) -> pl.LazyFrame: """Process and join with postcode coordinates.""" pass