import os import importlib def discover_analyses(): """ Automatically discover all analysis modules and their metadata. Returns: list: List of analysis metadata dictionaries """ analysis_dir = os.path.dirname(__file__) files = os.listdir(analysis_dir) analyses = [] for filename in files: if filename.endswith('.py') and filename != '__init__.py': module_name = filename.replace('.py', '') try: module = importlib.import_module(f'analysis.{module_name}') if hasattr(module, 'ANALYSIS_METADATA'): metadata = module.ANALYSIS_METADATA if metadata.get('enabled', True): analyses.append(metadata) except Exception as e: print(f"Warning: Could not load analysis module '{module_name}': {e}") return analyses def run_analyses(**available_files): """ Run all enabled analyses that have their required files available. Args: Various file paths from data downloads Returns: str: Combined message from all analyses """ analyses = discover_analyses() combined_message = "" for analysis in analyses: # Check if all required files are available required = analysis.get('required_files', []) if all(available_files.get(req) for req in required): try: # Build kwargs from required files kwargs = {req: available_files[req] for req in required} result = analysis['function'](**kwargs) # Handle different return formats if isinstance(result, tuple): for msg in result: if msg: combined_message += f"\n\n{msg}" elif result: combined_message += f"\n\n{result}" except Exception as e: combined_message += f"\n\n⚠️ Error in {analysis['name']}: {str(e)}" return combined_message