File size: 2,143 Bytes
5880145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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