| 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: |
| |
| required = analysis.get('required_files', []) |
| if all(available_files.get(req) for req in required): |
| try: |
| |
| kwargs = {req: available_files[req] for req in required} |
| result = analysis['function'](**kwargs) |
| |
| |
| 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 |