perfect-postcode/pipeline/base.py

22 lines
521 B
Python

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