File size: 2,102 Bytes
5143659
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dotenv import load_dotenv
import os
from huggingface_hub import HfApi, upload_folder, login
from pathlib import Path
import logging

def setup_logging():
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    return logging.getLogger(__name__)

def validate_environment():
    load_dotenv()
    token = os.getenv("HF_ACCESS_TOKEN")
    if not token:
        raise ValueError("HF_ACCESS_TOKEN environment variable is not set")
    return token

def validate_directory(dir_path: str) -> Path:
    path = Path(dir_path)
    if not path.exists():
        raise FileNotFoundError(f"Directory not found: {dir_path}")
    if not path.is_dir():
        raise NotADirectoryError(f"Path is not a directory: {dir_path}")
    return path

def create_and_upload_space(

    local_dir: str,

    repo_id: str,

    space_sdk: str = "streamlit",

    token: str = None

) -> None:
    logger = setup_logging()
    
    try:
        # Login
        token = token or validate_environment()
        login(token=token)
        
        # Validate directory
        dir_path = validate_directory(local_dir)
        
        # Initialize API
        api = HfApi()
        
        # Create space
        logger.info(f"Creating space repository: {repo_id}")
        api.create_repo(
            repo_id=repo_id,
            repo_type="space",
            space_sdk=space_sdk,
            exist_ok=True
        )
        
        # Upload files
        logger.info(f"Uploading files from {dir_path}")
        upload_folder(
            folder_path=str(dir_path),
            repo_id=repo_id,
            repo_type="space"
        )
        logger.info("Upload completed successfully")
        
    except Exception as e:
        logger.error(f"Operation failed: {str(e)}")
        raise

if __name__ == "__main__":
    create_and_upload_space(
        local_dir=r"C:\Users\rudra\Documents\GitHub\image-search-engine",
        repo_id="rudra0410/image-search-engine-fashion-space"
    )