import abc import dataclasses from collections.abc import Iterator, Mapping from enum import Enum import requests class DeduplicateMode(Enum): NONE = 0 BY_FIRST_COLUMN = 1 BY_ALL_COLUMNS = 2 ONLY_LATEST = 3 @dataclasses.dataclass(frozen=True) class Scraper(abc.ABC): session: requests.Session @staticmethod def dataset_name() -> str: pass @staticmethod def deduplicate_mode() -> DeduplicateMode: pass @staticmethod def deduplicate_ignore_columns() -> list[str]: return [] @staticmethod def dataset_format() -> str: return 'list-of-dicts' @staticmethod def requires_cfscrape() -> bool: return False @abc.abstractmethod def scrape(self) -> Iterator[Mapping[str, object]]: pass