Source code for impact_engine_measure.metrics.base

"""Base interfaces and common classes for the metrics layer."""

from abc import ABC, abstractmethod
from typing import Any, Dict

import pandas as pd


[docs] class MetricsInterface(ABC): """Abstract base class defining the contract for all metrics implementations. Required methods (must override): - connect: Initialize adapter with configuration - retrieve_business_metrics: Fetch metrics data Optional methods (have sensible defaults): - validate_connection: Check if connection is active - transform_outbound: Transform data to external format - transform_inbound: Transform data from external format """
[docs] @abstractmethod def connect(self, config: Dict[str, Any]) -> bool: """Establish connection to the metrics source.""" pass
[docs] @abstractmethod def retrieve_business_metrics(self, products: pd.DataFrame, start_date: str, end_date: str) -> pd.DataFrame: """Retrieve business metrics for specified products and time range. Parameters ---------- products : pd.DataFrame DataFrame with product identifiers and characteristics. start_date : str Start date in YYYY-MM-DD format. end_date : str End date in YYYY-MM-DD format. Returns ------- pd.DataFrame DataFrame with business metrics for the specified products. """ pass
[docs] def validate_connection(self) -> bool: """Validate that the metrics source connection is active and functional. Default implementation returns True. Override for custom validation. Returns ------- bool True if connection is valid, False otherwise. """ return True
[docs] def transform_outbound(self, products: pd.DataFrame, start_date: str, end_date: str) -> Dict[str, Any]: """Transform impact engine format to external system format. Default implementation is pass-through. Override for adapters that need data transformation. Parameters ---------- products : pd.DataFrame DataFrame with product identifiers and characteristics. start_date : str Start date in YYYY-MM-DD format. end_date : str End date in YYYY-MM-DD format. Returns ------- dict Dictionary with parameters formatted for the external system. """ return {"products": products, "start_date": start_date, "end_date": end_date}
[docs] def transform_inbound(self, external_data: Any) -> pd.DataFrame: """Transform external system response to impact engine format. Default implementation returns data as-is if DataFrame, otherwise raises. Override for adapters that need result transformation. Parameters ---------- external_data : Any Raw data from the external system. Returns ------- pd.DataFrame DataFrame with standardized business metrics format. """ if isinstance(external_data, pd.DataFrame): return external_data raise ValueError(f"Expected DataFrame, got {type(external_data).__name__}")