File size: 2,258 Bytes
d868fac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
import argparse
import os

from huggingface_hub import HfApi


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Upload a local folder to a Hugging Face Space, respecting .gitignore and showing progress."
    )
    parser.add_argument(
        "repo_id",
        help="Space repository ID in the form 'username/space-name'"
    )
    parser.add_argument(
        "--folder-path", "-f",
        default=".",
        help="Local folder path to upload (default: current directory)"
    )
    parser.add_argument(
        "--path-in-repo", "-p",
        default="",
        help="Target path in the repository (default: root)"
    )
    parser.add_argument(
        "--commit-message", "-m",
        default="Upload folder via script",
        help="Commit message for the upload"
    )
    parser.add_argument(
        "--token", "-t",
        default=None,
        help=(
            "Hugging Face access token (will use HF_TOKEN or HUGGINGFACE_HUB_TOKEN "
            "from environment if not provided)"
        )
    )
    parser.add_argument(
        "--large",
        action="store_true",
        help="Use upload_large_folder for large uploads"
    )
    return parser.parse_args()


def main() -> None:
    args = parse_args()
    # Determine token from argument or environment
    token = args.token or os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACE_HUB_TOKEN")
    if not token:
        print(
            "Warning: No token provided via --token or environment variable. "
            "Please set HF_TOKEN/HUGGINGFACE_HUB_TOKEN or run `huggingface-cli login`."
        )

    api = HfApi()

    if args.large:
        api.upload_large_folder(
            folder_path=args.folder_path,
            repo_id=args.repo_id,
            repo_type="space",
            print_report=True
        )
    else:
        api.upload_folder(
            folder_path=args.folder_path,
            path_in_repo=args.path_in_repo,
            repo_id=args.repo_id,
            repo_type="space",
            token=token,
            commit_message=args.commit_message
        )

    print(f"Successfully uploaded '{args.folder_path}' to '{args.repo_id}'.")


if __name__ == "__main__":
    main()