from abc import abstractmethod from typing import Any, Dict from app_types import S3Path from constants import CHANGE_DAYS, CHART_DAYS, LAST_RELEASE_DAYS from ... import BaseStep from ...mixins import SnowflakeMixin __all__ = ["SearchExtractBase"] class SearchExtractBase(SnowflakeMixin, BaseStep): priority = 2 chart_days: int = CHART_DAYS change_days: int = CHANGE_DAYS last_release_days: int = LAST_RELEASE_DAYS @property @abstractmethod def query(self) -> str: pass @property @abstractmethod def raw_data_path(self) -> S3Path: pass def process(self) -> Dict[str, Any]: result = self.export(query=self.query, prefix=self.raw_data_path, is_async=False) return {"extracted_data_report": result}