| | |
| | """ |
| | FRED ML Development Environment Setup |
| | Simple setup script for development testing |
| | """ |
| |
|
| | import os |
| | import sys |
| | import subprocess |
| | from pathlib import Path |
| |
|
| | def check_python_version(): |
| | """Check Python version""" |
| | version = sys.version_info |
| | if version.major != 3 or version.minor < 9: |
| | print(f"β Python 3.9+ required, found {version.major}.{version.minor}") |
| | return False |
| | print(f"β
Python {version.major}.{version.minor}.{version.micro}") |
| | return True |
| |
|
| | def check_environment_variables(): |
| | """Check required environment variables""" |
| | required_vars = ['AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'FRED_API_KEY'] |
| | missing_vars = [] |
| | |
| | for var in required_vars: |
| | if not os.getenv(var): |
| | missing_vars.append(var) |
| | |
| | if missing_vars: |
| | print(f"β Missing environment variables: {', '.join(missing_vars)}") |
| | print("Please set these variables:") |
| | for var in missing_vars: |
| | print(f" export {var}=your_value") |
| | return False |
| | |
| | print("β
Environment variables set") |
| | return True |
| |
|
| | def install_dependencies(): |
| | """Install required dependencies""" |
| | print("π¦ Installing dependencies...") |
| | |
| | try: |
| | subprocess.run([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"], |
| | check=True, capture_output=True, text=True) |
| | print("β
Dependencies installed") |
| | return True |
| | except subprocess.CalledProcessError as e: |
| | print(f"β Failed to install dependencies: {e}") |
| | return False |
| |
|
| | def test_imports(): |
| | """Test that all required packages can be imported""" |
| | required_packages = [ |
| | 'boto3', 'streamlit', 'pandas', 'numpy', 'matplotlib', |
| | 'seaborn', 'plotly', 'fredapi', 'requests' |
| | ] |
| | |
| | failed_imports = [] |
| | for package in required_packages: |
| | try: |
| | __import__(package) |
| | print(f"β
{package}") |
| | except ImportError: |
| | failed_imports.append(package) |
| | print(f"β {package}") |
| | |
| | if failed_imports: |
| | print(f"\nβ Failed to import: {', '.join(failed_imports)}") |
| | return False |
| | |
| | return True |
| |
|
| | def test_aws_access(): |
| | """Test AWS access""" |
| | try: |
| | import boto3 |
| | s3 = boto3.client('s3') |
| | s3.head_bucket(Bucket='fredmlv1') |
| | print("β
AWS S3 access") |
| | return True |
| | except Exception as e: |
| | print(f"β AWS S3 access failed: {str(e)}") |
| | return False |
| |
|
| | def test_fred_api(): |
| | """Test FRED API access""" |
| | try: |
| | from fredapi import Fred |
| | fred = Fred(api_key=os.getenv('FRED_API_KEY')) |
| | data = fred.get_series('GDP', limit=1) |
| | if len(data) > 0: |
| | print("β
FRED API access") |
| | return True |
| | else: |
| | print("β FRED API returned no data") |
| | return False |
| | except Exception as e: |
| | print(f"β FRED API access failed: {str(e)}") |
| | return False |
| |
|
| | def main(): |
| | """Main setup function""" |
| | print("π FRED ML Development Environment Setup") |
| | print("=" * 50) |
| | |
| | checks = [ |
| | ("Python Version", check_python_version), |
| | ("Environment Variables", check_environment_variables), |
| | ("Dependencies", install_dependencies), |
| | ("Package Imports", test_imports), |
| | ("AWS Access", test_aws_access), |
| | ("FRED API", test_fred_api) |
| | ] |
| | |
| | passed = 0 |
| | total = len(checks) |
| | |
| | for name, check_func in checks: |
| | print(f"\nπ Checking {name}...") |
| | if check_func(): |
| | passed += 1 |
| | else: |
| | print(f"β {name} check failed") |
| | |
| | print(f"\nπ Setup Summary: {passed}/{total} checks passed") |
| | |
| | if passed == total: |
| | print("β
Development environment ready!") |
| | print("\nπ― Next steps:") |
| | print("1. Test the Streamlit app: streamlit run frontend/app.py") |
| | print("2. Test Lambda function: python scripts/test_complete_system.py") |
| | print("3. Run end-to-end tests: python scripts/test_complete_system.py --e2e") |
| | return True |
| | else: |
| | print("β Setup incomplete. Please fix the issues above.") |
| | return False |
| |
|
| | if __name__ == '__main__': |
| | success = main() |
| | sys.exit(0 if success else 1) |