| | |
| | 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() |
| | |
| | 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() |