import os import pkgutil import importlib import inspect from abc import ABC from .base import BaseAnalysis import pandas as pd def load_analysis_modules(): analysis_modules = [] package_path = __path__[0] for _, module_name, _ in pkgutil.iter_modules([package_path]): module = importlib.import_module(f"app.analysis.{module_name}") for _, obj in inspect.getmembers(module, inspect.isclass): # Exclude abstract classes (like BasePlotAnalysis) if issubclass(obj, BaseAnalysis) and obj is not BaseAnalysis and not inspect.isabstract(obj): analysis_modules.append(obj()) # Instantiate only concrete classes return analysis_modules def load_data(file_path: str) -> pd.DataFrame: """Loads the scraped data from a CSV file into a Pandas DataFrame.""" if not os.path.exists(file_path): raise FileNotFoundError(f"File {file_path} not found.") df = pd.read_csv(file_path) df["timestamp"] = pd.to_datetime(df["timestamp"], errors="coerce") df["last_action"] = pd.to_datetime(df["last_action"], errors="coerce") return df