velai / scripts /publish.py
cansik's picture
Upload folder via script
d868fac verified
#!/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()