Spaces:
Sleeping
Sleeping
#!/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) |