e-vca / analysis /__init__.py
rapsoj's picture
Upload 2 files
5880145 verified
Raw
History Blame Contribute Delete
2.14 kB
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