Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| Test script to verify the latest Trackio Space deployment using HF Hub API | |
| """ | |
| import os | |
| import sys | |
| import tempfile | |
| import shutil | |
| from pathlib import Path | |
| # Add project root to path | |
| project_root = Path(__file__).parent.parent | |
| sys.path.insert(0, str(project_root)) | |
| def test_hf_hub_import(): | |
| """Test that huggingface_hub can be imported""" | |
| print("π Testing huggingface_hub import...") | |
| try: | |
| from huggingface_hub import HfApi, create_repo | |
| print("β huggingface_hub imported successfully") | |
| return True | |
| except ImportError as e: | |
| print(f"β Failed to import huggingface_hub: {e}") | |
| print("π‘ Install with: pip install huggingface_hub>=0.19.0") | |
| return False | |
| def test_deployment_script_import(): | |
| """Test that the deployment script can be imported""" | |
| print("\nπ Testing deployment script import...") | |
| try: | |
| sys.path.insert(0, str(project_root / "scripts" / "trackio_tonic")) | |
| from deploy_trackio_space import TrackioSpaceDeployer | |
| # Test class instantiation | |
| deployer = TrackioSpaceDeployer("test-space", "test-user", "test-token") | |
| print("β TrackioSpaceDeployer class imported successfully") | |
| # Test API availability | |
| if hasattr(deployer, 'api'): | |
| print("β HF API initialized") | |
| else: | |
| print("β οΈ HF API not available (fallback to CLI)") | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing deployment script: {e}") | |
| return False | |
| def test_api_methods(): | |
| """Test that the deployment script has the new API methods""" | |
| print("\nπ Testing API methods...") | |
| try: | |
| sys.path.insert(0, str(project_root / "scripts" / "trackio_tonic")) | |
| from deploy_trackio_space import TrackioSpaceDeployer | |
| deployer = TrackioSpaceDeployer("test-space", "test-user", "test-token") | |
| # Test required methods exist | |
| required_methods = [ | |
| "create_space", | |
| "_create_space_cli", | |
| "prepare_space_files", | |
| "upload_files_to_space", | |
| "test_space", | |
| "deploy" | |
| ] | |
| for method in required_methods: | |
| if hasattr(deployer, method): | |
| print(f"β Method exists: {method}") | |
| else: | |
| print(f"β Missing method: {method}") | |
| return False | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing API methods: {e}") | |
| return False | |
| def test_create_repo_api(): | |
| """Test the create_repo API function""" | |
| print("\nπ Testing create_repo API...") | |
| try: | |
| from huggingface_hub import create_repo | |
| # Test that the function exists and has the right parameters | |
| import inspect | |
| sig = inspect.signature(create_repo) | |
| # Check for required parameters | |
| required_params = ['repo_id', 'token'] | |
| optional_params = ['repo_type', 'space_sdk', 'space_hardware'] | |
| param_names = list(sig.parameters.keys()) | |
| for param in required_params: | |
| if param in param_names: | |
| print(f"β Required parameter: {param}") | |
| else: | |
| print(f"β Missing required parameter: {param}") | |
| return False | |
| for param in optional_params: | |
| if param in param_names: | |
| print(f"β Optional parameter: {param}") | |
| else: | |
| print(f"β οΈ Optional parameter not found: {param}") | |
| print("β create_repo API signature looks correct") | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing create_repo API: {e}") | |
| return False | |
| def test_space_creation_logic(): | |
| """Test the space creation logic""" | |
| print("\nπ Testing space creation logic...") | |
| try: | |
| sys.path.insert(0, str(project_root / "scripts" / "trackio_tonic")) | |
| from deploy_trackio_space import TrackioSpaceDeployer | |
| # Test with mock data | |
| deployer = TrackioSpaceDeployer("test-space", "test-user", "test-token") | |
| # Test that the space URL is correctly formatted | |
| expected_url = "https://huggingface.co/spaces/test-user/test-space" | |
| if deployer.space_url == expected_url: | |
| print("β Space URL formatted correctly") | |
| else: | |
| print(f"β Space URL incorrect: {deployer.space_url}") | |
| return False | |
| # Test that the repo_id is correctly formatted | |
| repo_id = f"{deployer.username}/{deployer.space_name}" | |
| expected_repo_id = "test-user/test-space" | |
| if repo_id == expected_repo_id: | |
| print("β Repo ID formatted correctly") | |
| else: | |
| print(f"β Repo ID incorrect: {repo_id}") | |
| return False | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing space creation logic: {e}") | |
| return False | |
| def test_template_files(): | |
| """Test that all required template files exist""" | |
| print("\nπ Testing template files...") | |
| spaces_dir = project_root / "templates" / "spaces" | |
| demo_types = ["demo_smol", "demo_gpt", "trackio"] | |
| required_files = ["app.py", "requirements.txt", "README.md"] | |
| for demo_type in demo_types: | |
| demo_dir = spaces_dir / demo_type | |
| print(f"Checking {demo_type} templates...") | |
| for file_name in required_files: | |
| file_path = demo_dir / file_name | |
| if file_path.exists(): | |
| print(f"β {demo_type}/{file_name} exists") | |
| else: | |
| print(f"β {demo_type}/{file_name} missing") | |
| return False | |
| return True | |
| def test_temp_directory_handling(): | |
| """Test temporary directory handling""" | |
| print("\nπ Testing temporary directory handling...") | |
| try: | |
| import tempfile | |
| # Test temp directory creation | |
| temp_dir = tempfile.mkdtemp() | |
| print(f"β Created temp directory: {temp_dir}") | |
| # Test file copying | |
| templates_dir = project_root / "templates" / "spaces" | |
| test_file = templates_dir / "app.py" | |
| if test_file.exists(): | |
| dest_file = Path(temp_dir) / "app.py" | |
| shutil.copy2(test_file, dest_file) | |
| print("β File copying works") | |
| else: | |
| print("β Source file not found") | |
| return False | |
| # Clean up | |
| shutil.rmtree(temp_dir) | |
| print("β Cleanup successful") | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing temp directory handling: {e}") | |
| return False | |
| def main(): | |
| """Run all deployment tests""" | |
| print("π Testing Latest Trackio Space Deployment") | |
| print("=" * 55) | |
| tests = [ | |
| test_hf_hub_import, | |
| test_deployment_script_import, | |
| test_api_methods, | |
| test_create_repo_api, | |
| test_space_creation_logic, | |
| test_template_files, | |
| test_temp_directory_handling | |
| ] | |
| passed = 0 | |
| total = len(tests) | |
| for test in tests: | |
| try: | |
| if test(): | |
| passed += 1 | |
| except Exception as e: | |
| print(f"β Test {test.__name__} crashed: {e}") | |
| print(f"\nπ Test Results: {passed}/{total} tests passed") | |
| if passed == total: | |
| print("β All deployment tests passed! The latest deployment should work correctly.") | |
| print("\nπ― Next steps:") | |
| print("1. Install latest huggingface_hub: pip install huggingface_hub>=0.19.0") | |
| print("2. Run the deployment script: python scripts/trackio_tonic/deploy_trackio_space.py") | |
| print("3. Provide your HF username, space name, and token") | |
| print("4. Wait for the Space to build (2-5 minutes)") | |
| print("5. Test the Space URL") | |
| return True | |
| else: | |
| print("β Some deployment tests failed. Please check the errors above.") | |
| print("\nπ‘ Troubleshooting:") | |
| print("1. Install huggingface_hub: pip install huggingface_hub>=0.19.0") | |
| print("2. Check that all template files exist") | |
| print("3. Verify the deployment script structure") | |
| return False | |
| if __name__ == "__main__": | |
| success = main() | |
| sys.exit(0 if success else 1) |