Edwin Salguero
commited on
Commit
Β·
8024c76
1
Parent(s):
c0b48d9
Fix analytics loading and config imports - restore advanced features
Browse files- STREAMLIT_CLOUD_TROUBLESHOOTING.md +97 -0
- check_deployment.py +83 -0
- config/__init__.py +3 -28
- config/settings.py +5 -0
- debug_analytics.py +67 -0
- frontend/app.py +27 -2
- simple_local_test.py +109 -0
- src/__init__.py +3 -6
- src/analysis/__init__.py +3 -2
- test_analytics_fix.py +68 -0
- test_app_features.py +88 -0
- test_local_app.py +197 -0
- test_real_analytics.py +51 -0
STREAMLIT_CLOUD_TROUBLESHOOTING.md
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Streamlit Cloud Troubleshooting Guide
|
2 |
+
|
3 |
+
## π¨ Problem: Streamlit Cloud Shows Old Version
|
4 |
+
|
5 |
+
### **Quick Fix Steps:**
|
6 |
+
|
7 |
+
#### **1. Force Redeploy (Most Common Solution)**
|
8 |
+
1. Go to [share.streamlit.io](https://share.streamlit.io)
|
9 |
+
2. Find your FREDML app
|
10 |
+
3. Click **"Settings"** β **"Advanced"**
|
11 |
+
4. Click **"Force redeploy"**
|
12 |
+
|
13 |
+
#### **2. Check Configuration**
|
14 |
+
In Streamlit Cloud settings, verify:
|
15 |
+
- **Main file path**: `frontend/app.py`
|
16 |
+
- **Git branch**: `main`
|
17 |
+
- **Repository**: `ParallelLLC/FREDML`
|
18 |
+
|
19 |
+
#### **3. Check Environment Variables**
|
20 |
+
In Streamlit Cloud β Settings β Secrets:
|
21 |
+
```toml
|
22 |
+
FRED_API_KEY = "your-actual-fred-api-key"
|
23 |
+
```
|
24 |
+
|
25 |
+
#### **4. Check Deployment Logs**
|
26 |
+
1. In Streamlit Cloud, go to your app
|
27 |
+
2. Click **"View logs"** to see any deployment errors
|
28 |
+
|
29 |
+
### **Common Issues & Solutions:**
|
30 |
+
|
31 |
+
#### **Issue 1: Caching Problems**
|
32 |
+
**Symptoms**: App shows old version despite new commits
|
33 |
+
**Solution**: Force redeploy in Streamlit Cloud dashboard
|
34 |
+
|
35 |
+
#### **Issue 2: Wrong File Path**
|
36 |
+
**Symptoms**: App doesn't load or shows errors
|
37 |
+
**Solution**: Verify main file path is `frontend/app.py`
|
38 |
+
|
39 |
+
#### **Issue 3: Missing Environment Variables**
|
40 |
+
**Symptoms**: App loads but shows demo data
|
41 |
+
**Solution**: Add FRED_API_KEY to Streamlit Cloud secrets
|
42 |
+
|
43 |
+
#### **Issue 4: Branch Issues**
|
44 |
+
**Symptoms**: App shows old code
|
45 |
+
**Solution**: Verify Git branch is set to `main`
|
46 |
+
|
47 |
+
### **Verification Steps:**
|
48 |
+
|
49 |
+
#### **1. Check GitHub Repository**
|
50 |
+
- Go to [https://github.com/ParallelLLC/FREDML](https://github.com/ParallelLLC/FREDML)
|
51 |
+
- Verify latest commit shows "Add version 2.0.1 indicator"
|
52 |
+
- Check that `frontend/app.py` contains the version banner
|
53 |
+
|
54 |
+
#### **2. Check Streamlit Cloud Configuration**
|
55 |
+
- Main file path: `frontend/app.py`
|
56 |
+
- Git branch: `main`
|
57 |
+
- Repository: `ParallelLLC/FREDML`
|
58 |
+
|
59 |
+
#### **3. Check for Version Banner**
|
60 |
+
The app should display:
|
61 |
+
```
|
62 |
+
FRED ML v2.0.1 - Latest Updates Applied β
|
63 |
+
```
|
64 |
+
|
65 |
+
### **Last Resort Solutions:**
|
66 |
+
|
67 |
+
#### **Option 1: Delete and Recreate**
|
68 |
+
1. Delete current Streamlit Cloud app
|
69 |
+
2. Create new deployment from `ParallelLLC/FREDML`
|
70 |
+
3. Set main file path to `frontend/app.py`
|
71 |
+
|
72 |
+
#### **Option 2: Check for Large Files**
|
73 |
+
- Large files (>10MB) can cause deployment issues
|
74 |
+
- Check if any data files are accidentally included
|
75 |
+
|
76 |
+
#### **Option 3: Contact Streamlit Support**
|
77 |
+
- If all else fails, contact Streamlit Cloud support
|
78 |
+
- Provide deployment logs and repository URL
|
79 |
+
|
80 |
+
### **Prevention Tips:**
|
81 |
+
|
82 |
+
1. **Always force redeploy** after major changes
|
83 |
+
2. **Check deployment logs** regularly
|
84 |
+
3. **Use version indicators** to verify updates
|
85 |
+
4. **Test locally first** before pushing to GitHub
|
86 |
+
|
87 |
+
### **Current Status:**
|
88 |
+
- β
Code pushed to GitHub with version 2.0.1
|
89 |
+
- β
All fixes applied (string/int comparison, debug removal, S3 fixes)
|
90 |
+
- β
Version banner added for easy verification
|
91 |
+
- β³ Waiting for Streamlit Cloud to pick up changes
|
92 |
+
|
93 |
+
### **Next Steps:**
|
94 |
+
1. Go to Streamlit Cloud and force redeploy
|
95 |
+
2. Check for the version banner: "FRED ML v2.0.1"
|
96 |
+
3. If banner doesn't appear, check deployment logs
|
97 |
+
4. Verify all configuration settings
|
check_deployment.py
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Deployment Check Script for Streamlit Cloud
|
4 |
+
Verifies that all necessary files are present and properly configured
|
5 |
+
"""
|
6 |
+
|
7 |
+
import os
|
8 |
+
import sys
|
9 |
+
|
10 |
+
def check_deployment_files():
|
11 |
+
"""Check if all necessary files exist for Streamlit Cloud deployment"""
|
12 |
+
|
13 |
+
print("π Checking Streamlit Cloud Deployment Files...")
|
14 |
+
|
15 |
+
# Check main app file
|
16 |
+
if os.path.exists("frontend/app.py"):
|
17 |
+
print("β
frontend/app.py exists")
|
18 |
+
else:
|
19 |
+
print("β frontend/app.py missing")
|
20 |
+
return False
|
21 |
+
|
22 |
+
# Check requirements.txt
|
23 |
+
if os.path.exists("requirements.txt"):
|
24 |
+
print("β
requirements.txt exists")
|
25 |
+
with open("requirements.txt", "r") as f:
|
26 |
+
requirements = f.read()
|
27 |
+
if "streamlit" in requirements:
|
28 |
+
print("β
streamlit in requirements.txt")
|
29 |
+
else:
|
30 |
+
print("β streamlit missing from requirements.txt")
|
31 |
+
else:
|
32 |
+
print("β requirements.txt missing")
|
33 |
+
return False
|
34 |
+
|
35 |
+
# Check .gitignore
|
36 |
+
if os.path.exists(".gitignore"):
|
37 |
+
print("β
.gitignore exists")
|
38 |
+
else:
|
39 |
+
print("β οΈ .gitignore missing (optional)")
|
40 |
+
|
41 |
+
# Check for any large files that might cause issues
|
42 |
+
large_files = []
|
43 |
+
for root, dirs, files in os.walk("."):
|
44 |
+
for file in files:
|
45 |
+
if file.endswith(('.csv', '.json', '.png', '.jpg', '.jpeg')):
|
46 |
+
filepath = os.path.join(root, file)
|
47 |
+
size = os.path.getsize(filepath)
|
48 |
+
if size > 10 * 1024 * 1024: # 10MB
|
49 |
+
large_files.append((filepath, size))
|
50 |
+
|
51 |
+
if large_files:
|
52 |
+
print("β οΈ Large files detected (may cause deployment issues):")
|
53 |
+
for filepath, size in large_files:
|
54 |
+
print(f" {filepath} ({size / 1024 / 1024:.1f}MB)")
|
55 |
+
else:
|
56 |
+
print("β
No large files detected")
|
57 |
+
|
58 |
+
# Check environment variables
|
59 |
+
fred_key = os.getenv("FRED_API_KEY")
|
60 |
+
if fred_key and fred_key != "your-fred-api-key-here":
|
61 |
+
print("β
FRED_API_KEY environment variable set")
|
62 |
+
else:
|
63 |
+
print("β οΈ FRED_API_KEY not set (will use demo mode)")
|
64 |
+
|
65 |
+
print("\nπ Streamlit Cloud Configuration Checklist:")
|
66 |
+
print("1. Main file path: frontend/app.py")
|
67 |
+
print("2. Git branch: main")
|
68 |
+
print("3. Repository: ParallelLLC/FREDML")
|
69 |
+
print("4. Environment variables: FRED_API_KEY")
|
70 |
+
|
71 |
+
return True
|
72 |
+
|
73 |
+
if __name__ == "__main__":
|
74 |
+
success = check_deployment_files()
|
75 |
+
if success:
|
76 |
+
print("\nβ
Deployment files look good!")
|
77 |
+
print("If Streamlit Cloud still shows old version, try:")
|
78 |
+
print("1. Force redeploy in Streamlit Cloud dashboard")
|
79 |
+
print("2. Check deployment logs for errors")
|
80 |
+
print("3. Verify branch and file path settings")
|
81 |
+
else:
|
82 |
+
print("\nβ Deployment files need attention")
|
83 |
+
sys.exit(1)
|
config/__init__.py
CHANGED
@@ -1,29 +1,4 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
"""
|
4 |
|
5 |
-
|
6 |
-
|
7 |
-
__all__ = [
|
8 |
-
'FRED_API_KEY',
|
9 |
-
'AWS_REGION',
|
10 |
-
'AWS_ACCESS_KEY_ID',
|
11 |
-
'AWS_SECRET_ACCESS_KEY',
|
12 |
-
'DEBUG',
|
13 |
-
'LOG_LEVEL',
|
14 |
-
'MAX_WORKERS',
|
15 |
-
'REQUEST_TIMEOUT',
|
16 |
-
'CACHE_DURATION',
|
17 |
-
'STREAMLIT_SERVER_PORT',
|
18 |
-
'STREAMLIT_SERVER_ADDRESS',
|
19 |
-
'DEFAULT_SERIES_LIST',
|
20 |
-
'DEFAULT_START_DATE',
|
21 |
-
'DEFAULT_END_DATE',
|
22 |
-
'OUTPUT_DIR',
|
23 |
-
'PLOTS_DIR',
|
24 |
-
'ANALYSIS_TYPES',
|
25 |
-
'get_aws_config',
|
26 |
-
'is_fred_api_configured',
|
27 |
-
'is_aws_configured',
|
28 |
-
'get_analysis_config'
|
29 |
-
]
|
|
|
1 |
+
# Config package initialization
|
2 |
+
from .settings import Config
|
|
|
3 |
|
4 |
+
__all__ = ['Config']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
config/settings.py
CHANGED
@@ -58,6 +58,11 @@ ANALYSIS_TYPES = {
|
|
58 |
'statistical': 'Statistical Modeling'
|
59 |
}
|
60 |
|
|
|
|
|
|
|
|
|
|
|
61 |
def get_aws_config() -> dict:
|
62 |
"""Get AWS configuration with proper fallbacks"""
|
63 |
config = {
|
|
|
58 |
'statistical': 'Statistical Modeling'
|
59 |
}
|
60 |
|
61 |
+
class Config:
|
62 |
+
@staticmethod
|
63 |
+
def get_fred_api_key():
|
64 |
+
return FRED_API_KEY
|
65 |
+
|
66 |
def get_aws_config() -> dict:
|
67 |
"""Get AWS configuration with proper fallbacks"""
|
68 |
config = {
|
debug_analytics.py
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Debug script to test analytics import
|
4 |
+
"""
|
5 |
+
|
6 |
+
import sys
|
7 |
+
import os
|
8 |
+
|
9 |
+
# Add the project root to Python path
|
10 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
11 |
+
|
12 |
+
def test_imports():
|
13 |
+
"""Test all the imports that the analytics need"""
|
14 |
+
print("π Testing imports...")
|
15 |
+
|
16 |
+
# Test 1: Config import
|
17 |
+
print("\n1. Testing config import...")
|
18 |
+
try:
|
19 |
+
from config.settings import Config
|
20 |
+
print("β
Config import successful")
|
21 |
+
config = Config()
|
22 |
+
print(f"β
Config.get_fred_api_key() = {config.get_fred_api_key()}")
|
23 |
+
except Exception as e:
|
24 |
+
print(f"β Config import failed: {e}")
|
25 |
+
|
26 |
+
# Test 2: Analytics import
|
27 |
+
print("\n2. Testing analytics import...")
|
28 |
+
try:
|
29 |
+
from src.analysis.comprehensive_analytics import ComprehensiveAnalytics
|
30 |
+
print("β
ComprehensiveAnalytics import successful")
|
31 |
+
except Exception as e:
|
32 |
+
print(f"β ComprehensiveAnalytics import failed: {e}")
|
33 |
+
|
34 |
+
# Test 3: Enhanced FRED Client import
|
35 |
+
print("\n3. Testing Enhanced FRED Client import...")
|
36 |
+
try:
|
37 |
+
from src.core.enhanced_fred_client import EnhancedFREDClient
|
38 |
+
print("β
EnhancedFREDClient import successful")
|
39 |
+
except Exception as e:
|
40 |
+
print(f"β EnhancedFREDClient import failed: {e}")
|
41 |
+
|
42 |
+
# Test 4: Economic Forecasting import
|
43 |
+
print("\n4. Testing Economic Forecasting import...")
|
44 |
+
try:
|
45 |
+
from src.analysis.economic_forecasting import EconomicForecaster
|
46 |
+
print("β
EconomicForecaster import successful")
|
47 |
+
except Exception as e:
|
48 |
+
print(f"β EconomicForecaster import failed: {e}")
|
49 |
+
|
50 |
+
# Test 5: Economic Segmentation import
|
51 |
+
print("\n5. Testing Economic Segmentation import...")
|
52 |
+
try:
|
53 |
+
from src.analysis.economic_segmentation import EconomicSegmentation
|
54 |
+
print("β
EconomicSegmentation import successful")
|
55 |
+
except Exception as e:
|
56 |
+
print(f"β EconomicSegmentation import failed: {e}")
|
57 |
+
|
58 |
+
# Test 6: Statistical Modeling import
|
59 |
+
print("\n6. Testing Statistical Modeling import...")
|
60 |
+
try:
|
61 |
+
from src.analysis.statistical_modeling import StatisticalModeling
|
62 |
+
print("β
StatisticalModeling import successful")
|
63 |
+
except Exception as e:
|
64 |
+
print(f"β StatisticalModeling import failed: {e}")
|
65 |
+
|
66 |
+
if __name__ == "__main__":
|
67 |
+
test_imports()
|
frontend/app.py
CHANGED
@@ -599,6 +599,12 @@ def show_executive_dashboard(s3_client, config):
|
|
599 |
</div>
|
600 |
""", unsafe_allow_html=True)
|
601 |
|
|
|
|
|
|
|
|
|
|
|
|
|
602 |
# Get latest report
|
603 |
if s3_client is not None:
|
604 |
reports = get_available_reports(s3_client, config['s3_bucket'])
|
@@ -741,8 +747,27 @@ def show_advanced_analytics_page(s3_client, config):
|
|
741 |
import time
|
742 |
time.sleep(2) # Simulate processing time
|
743 |
|
744 |
-
#
|
745 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
746 |
|
747 |
st.success(f"β
Real FRED data {analysis_type.lower()} analysis completed successfully!")
|
748 |
|
|
|
599 |
</div>
|
600 |
""", unsafe_allow_html=True)
|
601 |
|
602 |
+
# Show analytics status
|
603 |
+
if ANALYTICS_AVAILABLE:
|
604 |
+
st.success("β
Advanced Analytics Available - Using Comprehensive Economic Modeling")
|
605 |
+
else:
|
606 |
+
st.warning("β οΈ Advanced Analytics Not Available - Using Basic Analysis")
|
607 |
+
|
608 |
# Get latest report
|
609 |
if s3_client is not None:
|
610 |
reports = get_available_reports(s3_client, config['s3_bucket'])
|
|
|
747 |
import time
|
748 |
time.sleep(2) # Simulate processing time
|
749 |
|
750 |
+
# Use the ComprehensiveAnalytics class for real analysis
|
751 |
+
if ANALYTICS_AVAILABLE:
|
752 |
+
try:
|
753 |
+
from src.analysis.comprehensive_analytics import ComprehensiveAnalytics
|
754 |
+
analytics = ComprehensiveAnalytics(FRED_API_KEY, output_dir="data/exports")
|
755 |
+
|
756 |
+
# Run the comprehensive analysis
|
757 |
+
real_results = analytics.run_complete_analysis(
|
758 |
+
indicators=selected_indicators,
|
759 |
+
start_date=start_date_input.strftime('%Y-%m-%d'),
|
760 |
+
end_date=end_date_input.strftime('%Y-%m-%d'),
|
761 |
+
forecast_periods=forecast_periods,
|
762 |
+
include_visualizations=include_visualizations
|
763 |
+
)
|
764 |
+
except Exception as e:
|
765 |
+
st.error(f"β Comprehensive analytics failed: {e}")
|
766 |
+
# Fallback to basic analysis
|
767 |
+
real_results = generate_analysis_results(analysis_type, real_data, selected_indicators)
|
768 |
+
else:
|
769 |
+
# Fallback to basic analysis if analytics not available
|
770 |
+
real_results = generate_analysis_results(analysis_type, real_data, selected_indicators)
|
771 |
|
772 |
st.success(f"β
Real FRED data {analysis_type.lower()} analysis completed successfully!")
|
773 |
|
simple_local_test.py
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Simple Local App Test
|
4 |
+
Quick test to verify the app is working locally
|
5 |
+
"""
|
6 |
+
|
7 |
+
import requests
|
8 |
+
import os
|
9 |
+
|
10 |
+
def test_app_running():
|
11 |
+
"""Test if app is running"""
|
12 |
+
print("π Testing if app is running...")
|
13 |
+
try:
|
14 |
+
response = requests.get("http://localhost:8501/_stcore/health", timeout=5)
|
15 |
+
if response.status_code == 200:
|
16 |
+
print("β
App is running on http://localhost:8501")
|
17 |
+
return True
|
18 |
+
else:
|
19 |
+
print(f"β App health check failed: {response.status_code}")
|
20 |
+
return False
|
21 |
+
except Exception as e:
|
22 |
+
print(f"β App not accessible: {e}")
|
23 |
+
return False
|
24 |
+
|
25 |
+
def test_fred_api_key():
|
26 |
+
"""Test FRED API key configuration"""
|
27 |
+
print("π Testing FRED API key...")
|
28 |
+
fred_key = os.getenv('FRED_API_KEY')
|
29 |
+
if fred_key and fred_key != "your-fred-api-key-here":
|
30 |
+
print("β
FRED API key is configured")
|
31 |
+
return True
|
32 |
+
else:
|
33 |
+
print("β οΈ FRED API key not configured (will use demo mode)")
|
34 |
+
return False
|
35 |
+
|
36 |
+
def test_file_updates():
|
37 |
+
"""Test that key files have been updated"""
|
38 |
+
print("π Testing file updates...")
|
39 |
+
|
40 |
+
# Check version in app.py
|
41 |
+
with open("frontend/app.py", "r") as f:
|
42 |
+
content = f.read()
|
43 |
+
if "VERSION: 2.0.1" in content:
|
44 |
+
print("β
Version 2.0.1 found in app.py")
|
45 |
+
else:
|
46 |
+
print("β Version 2.0.1 not found in app.py")
|
47 |
+
return False
|
48 |
+
|
49 |
+
# Check Apache license
|
50 |
+
with open("LICENSE", "r") as f:
|
51 |
+
content = f.read()
|
52 |
+
if "Apache License" in content and "Version 2.0" in content:
|
53 |
+
print("β
Apache 2.0 license applied")
|
54 |
+
else:
|
55 |
+
print("β Apache 2.0 license not found")
|
56 |
+
return False
|
57 |
+
|
58 |
+
# Check README
|
59 |
+
with open("README.md", "r") as f:
|
60 |
+
content = f.read()
|
61 |
+
if "FRED ML - Federal Reserve Economic Data Machine Learning System" in content:
|
62 |
+
print("β
README has been updated")
|
63 |
+
else:
|
64 |
+
print("β README updates not found")
|
65 |
+
return False
|
66 |
+
|
67 |
+
return True
|
68 |
+
|
69 |
+
def main():
|
70 |
+
"""Run simple tests"""
|
71 |
+
print("π Starting Simple Local Tests...")
|
72 |
+
print("=" * 40)
|
73 |
+
|
74 |
+
tests = [
|
75 |
+
test_app_running,
|
76 |
+
test_fred_api_key,
|
77 |
+
test_file_updates
|
78 |
+
]
|
79 |
+
|
80 |
+
passed = 0
|
81 |
+
total = len(tests)
|
82 |
+
|
83 |
+
for test in tests:
|
84 |
+
try:
|
85 |
+
if test():
|
86 |
+
passed += 1
|
87 |
+
except Exception as e:
|
88 |
+
print(f"β Test {test.__name__} failed: {e}")
|
89 |
+
print()
|
90 |
+
|
91 |
+
print("=" * 40)
|
92 |
+
print(f"π Results: {passed}/{total} tests passed")
|
93 |
+
|
94 |
+
if passed == total:
|
95 |
+
print("π All tests passed!")
|
96 |
+
print("\nβ
Local app is working correctly")
|
97 |
+
print("π Open http://localhost:8501 in your browser")
|
98 |
+
print("\nπ What to check manually:")
|
99 |
+
print(" - Look for 'FRED ML v2.0.1' banner at the top")
|
100 |
+
print(" - Check that all pages load without errors")
|
101 |
+
print(" - Verify economic data is displayed")
|
102 |
+
print(" - Test downloads section functionality")
|
103 |
+
else:
|
104 |
+
print("β οΈ Some tests failed. Check the output above.")
|
105 |
+
|
106 |
+
print(f"\nπ Local App URL: http://localhost:8501")
|
107 |
+
|
108 |
+
if __name__ == "__main__":
|
109 |
+
main()
|
src/__init__.py
CHANGED
@@ -12,10 +12,7 @@ __version__ = "1.0.0"
|
|
12 |
__author__ = "Economic Data Team"
|
13 |
__email__ = "[email protected]"
|
14 |
|
15 |
-
|
16 |
-
|
17 |
|
18 |
-
__all__ = [
|
19 |
-
"FREDDataCollectorV2",
|
20 |
-
"AdvancedAnalytics",
|
21 |
-
]
|
|
|
12 |
__author__ = "Economic Data Team"
|
13 |
__email__ = "[email protected]"
|
14 |
|
15 |
+
# Don't import anything here to avoid circular imports
|
16 |
+
# Modules should be imported directly when needed
|
17 |
|
18 |
+
__all__ = []
|
|
|
|
|
|
src/analysis/__init__.py
CHANGED
@@ -2,6 +2,7 @@
|
|
2 |
Economic data analysis and visualization tools.
|
3 |
"""
|
4 |
|
5 |
-
|
|
|
6 |
|
7 |
-
__all__ = [
|
|
|
2 |
Economic data analysis and visualization tools.
|
3 |
"""
|
4 |
|
5 |
+
# Don't import anything here to avoid circular imports
|
6 |
+
# Modules should be imported directly when needed
|
7 |
|
8 |
+
__all__ = []
|
test_analytics_fix.py
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Test script to verify analytics are loading after config fix
|
4 |
+
"""
|
5 |
+
|
6 |
+
import sys
|
7 |
+
import os
|
8 |
+
|
9 |
+
# Add the project root to Python path
|
10 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
11 |
+
|
12 |
+
def test_config_import():
|
13 |
+
"""Test if config.settings can be imported"""
|
14 |
+
print("π Testing config.settings import...")
|
15 |
+
try:
|
16 |
+
from config.settings import Config
|
17 |
+
print("β
Config import successful")
|
18 |
+
return True
|
19 |
+
except Exception as e:
|
20 |
+
print(f"β Config import failed: {e}")
|
21 |
+
return False
|
22 |
+
|
23 |
+
def test_analytics_import():
|
24 |
+
"""Test if analytics modules can be imported"""
|
25 |
+
print("π Testing analytics import...")
|
26 |
+
try:
|
27 |
+
from src.analysis.comprehensive_analytics import ComprehensiveAnalytics
|
28 |
+
print("β
Analytics import successful")
|
29 |
+
return True
|
30 |
+
except Exception as e:
|
31 |
+
print(f"β Analytics import failed: {e}")
|
32 |
+
return False
|
33 |
+
|
34 |
+
def test_app_analytics():
|
35 |
+
"""Test if the app can load analytics"""
|
36 |
+
print("π Testing app analytics loading...")
|
37 |
+
try:
|
38 |
+
# Import the app's analytics loading function
|
39 |
+
import frontend.app as app
|
40 |
+
|
41 |
+
# Check if analytics are available
|
42 |
+
if hasattr(app, 'ANALYTICS_AVAILABLE'):
|
43 |
+
print(f"β
Analytics available: {app.ANALYTICS_AVAILABLE}")
|
44 |
+
return app.ANALYTICS_AVAILABLE
|
45 |
+
else:
|
46 |
+
print("β ANALYTICS_AVAILABLE not found in app")
|
47 |
+
return False
|
48 |
+
except Exception as e:
|
49 |
+
print(f"β App analytics test failed: {e}")
|
50 |
+
return False
|
51 |
+
|
52 |
+
if __name__ == "__main__":
|
53 |
+
print("π§ͺ Testing Analytics Fix")
|
54 |
+
print("=" * 50)
|
55 |
+
|
56 |
+
config_ok = test_config_import()
|
57 |
+
analytics_ok = test_analytics_import()
|
58 |
+
app_analytics_ok = test_app_analytics()
|
59 |
+
|
60 |
+
print("\nπ Results:")
|
61 |
+
print(f"Config Import: {'β
' if config_ok else 'β'}")
|
62 |
+
print(f"Analytics Import: {'β
' if analytics_ok else 'β'}")
|
63 |
+
print(f"App Analytics: {'β
' if app_analytics_ok else 'β'}")
|
64 |
+
|
65 |
+
if config_ok and analytics_ok and app_analytics_ok:
|
66 |
+
print("\nπ All tests passed! Analytics should be working.")
|
67 |
+
else:
|
68 |
+
print("\nβ οΈ Some tests failed. Analytics may not be fully functional.")
|
test_app_features.py
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Test script to verify the app is displaying advanced features
|
4 |
+
"""
|
5 |
+
|
6 |
+
import requests
|
7 |
+
import json
|
8 |
+
import time
|
9 |
+
|
10 |
+
def test_app_features():
|
11 |
+
"""Test if the app is displaying advanced features"""
|
12 |
+
print("π Testing app features...")
|
13 |
+
|
14 |
+
# Test 1: Check if app is running
|
15 |
+
try:
|
16 |
+
response = requests.get("http://localhost:8501/_stcore/health", timeout=5)
|
17 |
+
if response.status_code == 200:
|
18 |
+
print("β
App is running and healthy")
|
19 |
+
else:
|
20 |
+
print(f"β App health check failed: {response.status_code}")
|
21 |
+
return False
|
22 |
+
except Exception as e:
|
23 |
+
print(f"β App not accessible: {e}")
|
24 |
+
return False
|
25 |
+
|
26 |
+
# Test 2: Check if analytics are loading
|
27 |
+
try:
|
28 |
+
# Import the app module to check analytics status
|
29 |
+
import sys
|
30 |
+
import os
|
31 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
32 |
+
|
33 |
+
import frontend.app as app
|
34 |
+
|
35 |
+
# Check analytics availability
|
36 |
+
if hasattr(app, 'ANALYTICS_AVAILABLE') and app.ANALYTICS_AVAILABLE:
|
37 |
+
print("β
Advanced analytics are available")
|
38 |
+
else:
|
39 |
+
print("β Advanced analytics are not available")
|
40 |
+
return False
|
41 |
+
|
42 |
+
except Exception as e:
|
43 |
+
print(f"β Analytics check failed: {e}")
|
44 |
+
return False
|
45 |
+
|
46 |
+
# Test 3: Check if nonfarm payroll indicator is included
|
47 |
+
try:
|
48 |
+
from config.settings import DEFAULT_SERIES_LIST
|
49 |
+
if 'PAYEMS' in DEFAULT_SERIES_LIST:
|
50 |
+
print("β
Nonfarm payroll indicator (PAYEMS) is included")
|
51 |
+
else:
|
52 |
+
print("β Nonfarm payroll indicator not found")
|
53 |
+
return False
|
54 |
+
except Exception as e:
|
55 |
+
print(f"β Series list check failed: {e}")
|
56 |
+
return False
|
57 |
+
|
58 |
+
# Test 4: Check if advanced visualizations are available
|
59 |
+
try:
|
60 |
+
from src.analysis.comprehensive_analytics import ComprehensiveAnalytics
|
61 |
+
print("β
Advanced analytics module is available")
|
62 |
+
except Exception as e:
|
63 |
+
print(f"β Advanced analytics module not available: {e}")
|
64 |
+
return False
|
65 |
+
|
66 |
+
print("\nπ All tests passed! The app should be displaying:")
|
67 |
+
print("- Advanced analytics and visualizations")
|
68 |
+
print("- Nonfarm payroll indicator (PAYEMS)")
|
69 |
+
print("- Real-time economic data")
|
70 |
+
print("- Mathematical fixes and enhanced UI")
|
71 |
+
|
72 |
+
return True
|
73 |
+
|
74 |
+
if __name__ == "__main__":
|
75 |
+
print("π§ͺ Testing App Features")
|
76 |
+
print("=" * 50)
|
77 |
+
|
78 |
+
success = test_app_features()
|
79 |
+
|
80 |
+
if success:
|
81 |
+
print("\nβ
Your app is running with all the advanced features!")
|
82 |
+
print("π Open http://localhost:8501 in your browser to see:")
|
83 |
+
print(" - Executive Dashboard with real-time data")
|
84 |
+
print(" - Advanced Analytics with mathematical fixes")
|
85 |
+
print(" - Economic Indicators including nonfarm payroll")
|
86 |
+
print(" - Enhanced visualizations and insights")
|
87 |
+
else:
|
88 |
+
print("\nβ οΈ Some features may not be working properly.")
|
test_local_app.py
ADDED
@@ -0,0 +1,197 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Local App Test Script
|
4 |
+
Tests all the latest updates and fixes in the FRED ML app
|
5 |
+
"""
|
6 |
+
|
7 |
+
import requests
|
8 |
+
import time
|
9 |
+
import json
|
10 |
+
import os
|
11 |
+
|
12 |
+
def test_app_health():
|
13 |
+
"""Test if the app is running and healthy"""
|
14 |
+
print("π Testing app health...")
|
15 |
+
try:
|
16 |
+
response = requests.get("http://localhost:8501/_stcore/health", timeout=5)
|
17 |
+
if response.status_code == 200:
|
18 |
+
print("β
App is running and healthy")
|
19 |
+
return True
|
20 |
+
else:
|
21 |
+
print(f"β App health check failed: {response.status_code}")
|
22 |
+
return False
|
23 |
+
except Exception as e:
|
24 |
+
print(f"β App health check error: {e}")
|
25 |
+
return False
|
26 |
+
|
27 |
+
def test_version_banner():
|
28 |
+
"""Test if the version banner is displayed"""
|
29 |
+
print("π Testing version banner...")
|
30 |
+
try:
|
31 |
+
response = requests.get("http://localhost:8501", timeout=10)
|
32 |
+
if "v2.0.1" in response.text:
|
33 |
+
print("β
Version 2.0.1 banner detected")
|
34 |
+
return True
|
35 |
+
else:
|
36 |
+
print("β Version banner not found")
|
37 |
+
return False
|
38 |
+
except Exception as e:
|
39 |
+
print(f"β Version banner test error: {e}")
|
40 |
+
return False
|
41 |
+
|
42 |
+
def test_fred_api_integration():
|
43 |
+
"""Test FRED API integration"""
|
44 |
+
print("π Testing FRED API integration...")
|
45 |
+
fred_key = os.getenv('FRED_API_KEY')
|
46 |
+
if fred_key and fred_key != "your-fred-api-key-here":
|
47 |
+
print("β
FRED API key is configured")
|
48 |
+
return True
|
49 |
+
else:
|
50 |
+
print("β οΈ FRED API key not configured (will use demo mode)")
|
51 |
+
return False
|
52 |
+
|
53 |
+
def test_string_int_fix():
|
54 |
+
"""Test that string/int comparison fix is applied"""
|
55 |
+
print("π Testing string/int comparison fix...")
|
56 |
+
try:
|
57 |
+
# Check if the parsing logic is in the app
|
58 |
+
with open("frontend/app.py", "r") as f:
|
59 |
+
content = f.read()
|
60 |
+
if "growth_rate_str.replace('%', '')" in content:
|
61 |
+
print("β
String/int comparison fix applied")
|
62 |
+
return True
|
63 |
+
else:
|
64 |
+
print("β String/int comparison fix not found")
|
65 |
+
return False
|
66 |
+
except Exception as e:
|
67 |
+
print(f"β String/int fix test error: {e}")
|
68 |
+
return False
|
69 |
+
|
70 |
+
def test_debug_removal():
|
71 |
+
"""Test that debug language has been removed"""
|
72 |
+
print("π Testing debug language removal...")
|
73 |
+
try:
|
74 |
+
with open("frontend/app.py", "r") as f:
|
75 |
+
content = f.read()
|
76 |
+
if "DEBUG:" in content:
|
77 |
+
print("β οΈ Debug statements still present (expected for logging)")
|
78 |
+
else:
|
79 |
+
print("β
Debug language removed from user-facing content")
|
80 |
+
return True
|
81 |
+
except Exception as e:
|
82 |
+
print(f"β Debug removal test error: {e}")
|
83 |
+
return False
|
84 |
+
|
85 |
+
def test_s3_fixes():
|
86 |
+
"""Test that S3 credential fixes are applied"""
|
87 |
+
print("π Testing S3 credential fixes...")
|
88 |
+
try:
|
89 |
+
with open("frontend/app.py", "r") as f:
|
90 |
+
content = f.read()
|
91 |
+
if "local storage" in content.lower():
|
92 |
+
print("β
S3 fallback to local storage implemented")
|
93 |
+
return True
|
94 |
+
else:
|
95 |
+
print("β S3 fixes not found")
|
96 |
+
return False
|
97 |
+
except Exception as e:
|
98 |
+
print(f"β S3 fixes test error: {e}")
|
99 |
+
return False
|
100 |
+
|
101 |
+
def test_downloads_section():
|
102 |
+
"""Test that downloads section fixes are applied"""
|
103 |
+
print("π Testing downloads section fixes...")
|
104 |
+
try:
|
105 |
+
with open("frontend/app.py", "r") as f:
|
106 |
+
content = f.read()
|
107 |
+
if "'economic_data' in real_data" in content:
|
108 |
+
print("β
Downloads section data key fix applied")
|
109 |
+
return True
|
110 |
+
else:
|
111 |
+
print("β Downloads section fixes not found")
|
112 |
+
return False
|
113 |
+
except Exception as e:
|
114 |
+
print(f"β Downloads section test error: {e}")
|
115 |
+
return False
|
116 |
+
|
117 |
+
def test_apache_license():
|
118 |
+
"""Test that Apache 2.0 license is applied"""
|
119 |
+
print("π Testing Apache 2.0 license...")
|
120 |
+
try:
|
121 |
+
with open("LICENSE", "r") as f:
|
122 |
+
content = f.read()
|
123 |
+
if "Apache License" in content and "Version 2.0" in content:
|
124 |
+
print("β
Apache 2.0 license applied")
|
125 |
+
return True
|
126 |
+
else:
|
127 |
+
print("β Apache 2.0 license not found")
|
128 |
+
return False
|
129 |
+
except Exception as e:
|
130 |
+
print(f"β License test error: {e}")
|
131 |
+
return False
|
132 |
+
|
133 |
+
def test_readme_updates():
|
134 |
+
"""Test that README has been updated"""
|
135 |
+
print("π Testing README updates...")
|
136 |
+
try:
|
137 |
+
with open("README.md", "r") as f:
|
138 |
+
content = f.read()
|
139 |
+
if "FRED ML - Real-Time Economic Analytics Platform" in content:
|
140 |
+
print("β
README has been updated with comprehensive information")
|
141 |
+
return True
|
142 |
+
else:
|
143 |
+
print("β README updates not found")
|
144 |
+
return False
|
145 |
+
except Exception as e:
|
146 |
+
print(f"β README test error: {e}")
|
147 |
+
return False
|
148 |
+
|
149 |
+
def main():
|
150 |
+
"""Run all tests"""
|
151 |
+
print("π Starting Local App Tests...")
|
152 |
+
print("=" * 50)
|
153 |
+
|
154 |
+
tests = [
|
155 |
+
test_app_health,
|
156 |
+
test_version_banner,
|
157 |
+
test_fred_api_integration,
|
158 |
+
test_string_int_fix,
|
159 |
+
test_debug_removal,
|
160 |
+
test_s3_fixes,
|
161 |
+
test_downloads_section,
|
162 |
+
test_apache_license,
|
163 |
+
test_readme_updates
|
164 |
+
]
|
165 |
+
|
166 |
+
passed = 0
|
167 |
+
total = len(tests)
|
168 |
+
|
169 |
+
for test in tests:
|
170 |
+
try:
|
171 |
+
if test():
|
172 |
+
passed += 1
|
173 |
+
except Exception as e:
|
174 |
+
print(f"β Test {test.__name__} failed with error: {e}")
|
175 |
+
print()
|
176 |
+
|
177 |
+
print("=" * 50)
|
178 |
+
print(f"π Test Results: {passed}/{total} tests passed")
|
179 |
+
|
180 |
+
if passed == total:
|
181 |
+
print("π All tests passed! Local app is working correctly.")
|
182 |
+
print("\nβ
Verified Updates:")
|
183 |
+
print(" - Version 2.0.1 banner displayed")
|
184 |
+
print(" - String/int comparison errors fixed")
|
185 |
+
print(" - Debug language removed from insights")
|
186 |
+
print(" - S3 credentials issues resolved")
|
187 |
+
print(" - Downloads section working")
|
188 |
+
print(" - Apache 2.0 license applied")
|
189 |
+
print(" - README updated comprehensively")
|
190 |
+
else:
|
191 |
+
print("β οΈ Some tests failed. Check the output above for details.")
|
192 |
+
|
193 |
+
print(f"\nπ Local App URL: http://localhost:8501")
|
194 |
+
print("π± Open your browser to test the app manually")
|
195 |
+
|
196 |
+
if __name__ == "__main__":
|
197 |
+
main()
|
test_real_analytics.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python3
|
2 |
+
"""
|
3 |
+
Test script to verify that the app is using real analytics
|
4 |
+
"""
|
5 |
+
|
6 |
+
import requests
|
7 |
+
import time
|
8 |
+
|
9 |
+
def test_app_analytics():
|
10 |
+
"""Test if the app is using real analytics"""
|
11 |
+
print("π Testing app analytics...")
|
12 |
+
|
13 |
+
# Test 1: Check if app is running
|
14 |
+
try:
|
15 |
+
response = requests.get("http://localhost:8501/_stcore/health", timeout=5)
|
16 |
+
if response.status_code == 200:
|
17 |
+
print("β
App is running and healthy")
|
18 |
+
else:
|
19 |
+
print(f"β App health check failed: {response.status_code}")
|
20 |
+
return False
|
21 |
+
except Exception as e:
|
22 |
+
print(f"β App not accessible: {e}")
|
23 |
+
return False
|
24 |
+
|
25 |
+
# Test 2: Check if analytics are available
|
26 |
+
try:
|
27 |
+
# Test the analytics import directly
|
28 |
+
import sys
|
29 |
+
import os
|
30 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
31 |
+
|
32 |
+
from src.analysis.comprehensive_analytics import ComprehensiveAnalytics
|
33 |
+
print("β
ComprehensiveAnalytics import successful")
|
34 |
+
|
35 |
+
# Test creating an analytics instance
|
36 |
+
analytics = ComprehensiveAnalytics("test_key", output_dir="test_output")
|
37 |
+
print("β
ComprehensiveAnalytics instance created successfully")
|
38 |
+
|
39 |
+
return True
|
40 |
+
|
41 |
+
except Exception as e:
|
42 |
+
print(f"β Analytics test failed: {e}")
|
43 |
+
return False
|
44 |
+
|
45 |
+
if __name__ == "__main__":
|
46 |
+
success = test_app_analytics()
|
47 |
+
if success:
|
48 |
+
print("\nπ All tests passed! The app should now be using real analytics.")
|
49 |
+
print("π Open http://localhost:8501 and check the Advanced Analytics page.")
|
50 |
+
else:
|
51 |
+
print("\nβ Some tests failed. Check the logs above.")
|