File size: 7,271 Bytes
14e9cd5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75bcdb3
14e9cd5
 
 
 
75bcdb3
14e9cd5
75bcdb3
14e9cd5
75bcdb3
14e9cd5
 
 
 
 
 
 
 
75bcdb3
14e9cd5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#!/usr/bin/env python3
"""
Test script to verify Trackio Space deployment
"""

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_templates_structure():
    """Test that the templates structure is correct"""
    print("πŸ” Testing templates structure...")
    
    trackio_dir = project_root / "templates" / "spaces" / "trackio"
    
    required_files = ["app.py", "requirements.txt", "README.md"]
    
    for file_name in required_files:
        file_path = trackio_dir / file_name
        if file_path.exists():
            print(f"βœ… trackio/{file_name} exists")
        else:
            print(f"❌ trackio/{file_name} missing")
            return False
    
    return True

def test_app_py_content():
    """Test that app.py has the required structure"""
    print("\nπŸ” Testing app.py content...")
    
    app_path = project_root / "templates" / "spaces" / "trackio" / "app.py"
    
    try:
        with open(app_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Check for required components
        required_components = [
            "import gradio as gr",
            "class TrackioSpace",
            "def create_experiment_interface",
            "def log_metrics_interface",
            "def log_parameters_interface",
            "demo.launch()"
        ]
        
        for component in required_components:
            if component in content:
                print(f"βœ… Found: {component}")
            else:
                print(f"❌ Missing: {component}")
                return False
        
        return True
        
    except Exception as e:
        print(f"❌ Error reading app.py: {e}")
        return False

def test_requirements_content():
    """Test that requirements.txt has the required dependencies"""
    print("\nπŸ” Testing requirements.txt content...")
    
    req_path = project_root / "templates" / "spaces" / "requirements.txt"
    
    try:
        with open(req_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Check for required dependencies
        required_deps = [
            "gradio>=",
            "pandas>=",
            "numpy>=",
            "plotly>=",
            "requests>=",
            "datasets>=",
            "huggingface-hub>="
        ]
        
        for dep in required_deps:
            if dep in content:
                print(f"βœ… Found: {dep}")
            else:
                print(f"❌ Missing: {dep}")
                return False
        
        return True
        
    except Exception as e:
        print(f"❌ Error reading requirements.txt: {e}")
        return False

def test_readme_structure():
    """Test that README.md has the correct structure"""
    print("\nπŸ” Testing README.md structure...")
    
    readme_path = project_root / "templates" / "spaces" / "README.md"
    
    try:
        with open(readme_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Check for required sections
        required_sections = [
            "---",
            "title: Trackio Experiment Tracking",
            "sdk: gradio",
            "app_file: app.py",
            "# Trackio Experiment Tracking",
            "## Features",
            "## Usage",
            "Visit: {SPACE_URL}"
        ]
        
        for section in required_sections:
            if section in content:
                print(f"βœ… Found: {section}")
            else:
                print(f"❌ Missing: {section}")
                return False
        
        return True
        
    except Exception as e:
        print(f"❌ Error reading README.md: {e}")
        return False

def test_deployment_script():
    """Test that the deployment script can be imported and has required methods"""
    print("\nπŸ” Testing deployment script...")
    
    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 required methods exist
        required_methods = [
            "create_space",
            "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 deployment script: {e}")
        return False

def test_temp_directory_creation():
    """Test that the deployment script can create temporary directories"""
    print("\nπŸ” Testing temporary directory creation...")
    
    try:
        import tempfile
        import shutil
        
        # 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 creation: {e}")
        return False

def main():
    """Run all deployment tests"""
    print("πŸš€ Testing Trackio Space Deployment")
    print("=" * 50)
    
    tests = [
        test_templates_structure,
        test_app_py_content,
        test_requirements_content,
        test_readme_structure,
        test_deployment_script,
        test_temp_directory_creation
    ]
    
    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 Trackio Space should deploy correctly.")
        print("\n🎯 Next steps:")
        print("1. Run the deployment script: python scripts/trackio_tonic/deploy_trackio_space.py")
        print("2. Provide your HF username, space name, and token")
        print("3. Wait for the Space to build (2-5 minutes)")
        print("4. Test the Space URL")
        return True
    else:
        print("❌ Some deployment tests failed. Please check the errors above.")
        return False

if __name__ == "__main__":
    success = main()
    sys.exit(0 if success else 1)