federated-credit-scoring / test_hf_spaces.py
Transcendental-Programmer
fix : removed local host dependency
bd3da01
#!/usr/bin/env python3
"""
Test script for Hugging Face Spaces deployment
Verifies that the app.py works correctly without external dependencies
"""
import sys
import os
import importlib.util
def test_imports():
"""Test that all required imports work"""
print("Testing imports...")
required_packages = [
'streamlit',
'numpy',
'pandas',
'time',
'threading',
'json',
'logging',
'datetime',
'random'
]
for package in required_packages:
try:
importlib.import_module(package)
print(f"βœ… {package}")
except ImportError as e:
print(f"❌ {package}: {e}")
return False
return True
def test_app_structure():
"""Test that app.py has the required structure"""
print("\nTesting app.py structure...")
if not os.path.exists('app.py'):
print("❌ app.py not found")
return False
with open('app.py', 'r') as f:
content = f.read()
required_components = [
'SimulatedFederatedSystem',
'ClientSimulator',
'st.set_page_config',
'st.title',
'st.sidebar',
'st.header',
'st.form'
]
for component in required_components:
if component in content:
print(f"βœ… {component}")
else:
print(f"❌ {component} not found")
return False
return True
def test_requirements():
"""Test that requirements.txt is minimal"""
print("\nTesting requirements.txt...")
if not os.path.exists('requirements.txt'):
print("❌ requirements.txt not found")
return False
with open('requirements.txt', 'r') as f:
requirements = f.read()
# Check for minimal dependencies
minimal_deps = ['streamlit', 'numpy', 'pandas']
heavy_deps = ['tensorflow', 'torch', 'scikit-learn', 'flask', 'fastapi']
for dep in minimal_deps:
if dep in requirements:
print(f"βœ… {dep}")
else:
print(f"❌ {dep} missing")
return False
for dep in heavy_deps:
if dep in requirements:
print(f"⚠️ {dep} found (may cause HF Spaces issues)")
return True
def test_readme():
"""Test that README.md has HF Spaces config"""
print("\nTesting README.md...")
if not os.path.exists('README.md'):
print("❌ README.md not found")
return False
with open('README.md', 'r') as f:
content = f.read()
required_config = [
'title: Federated Credit Scoring',
'sdk: streamlit',
'app_port: 8501'
]
for config in required_config:
if config in content:
print(f"βœ… {config}")
else:
print(f"❌ {config} not found")
return False
return True
def main():
"""Run all tests"""
print("πŸ§ͺ Testing Hugging Face Spaces Deployment")
print("=" * 50)
tests = [
test_imports,
test_app_structure,
test_requirements,
test_readme
]
passed = 0
total = len(tests)
for test in tests:
try:
if test():
passed += 1
else:
print(f"❌ Test failed: {test.__name__}")
except Exception as e:
print(f"❌ Test error: {test.__name__} - {e}")
print("\n" + "=" * 50)
print(f"Results: {passed}/{total} tests passed")
if passed == total:
print("πŸŽ‰ All tests passed! Ready for HF Spaces deployment.")
return True
else:
print("❌ Some tests failed. Please fix issues before deployment.")
return False
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)