| | from typing import Union, BinaryIO |
| | from huggingface_hub import HfApi |
| | from pathlib import Path |
| | import argparse |
| | import os |
| | from library.utils import fire_in_thread |
| | from library.utils import setup_logging |
| | setup_logging() |
| | import logging |
| | logger = logging.getLogger(__name__) |
| |
|
| | def exists_repo(repo_id: str, repo_type: str, revision: str = "main", token: str = None): |
| | api = HfApi( |
| | token=token, |
| | ) |
| | try: |
| | api.repo_info(repo_id=repo_id, revision=revision, repo_type=repo_type) |
| | return True |
| | except: |
| | return False |
| |
|
| |
|
| | def upload( |
| | args: argparse.Namespace, |
| | src: Union[str, Path, bytes, BinaryIO], |
| | dest_suffix: str = "", |
| | force_sync_upload: bool = False, |
| | ): |
| | repo_id = args.huggingface_repo_id |
| | repo_type = args.huggingface_repo_type |
| | token = args.huggingface_token |
| | path_in_repo = args.huggingface_path_in_repo + dest_suffix if args.huggingface_path_in_repo is not None else None |
| | private = args.huggingface_repo_visibility is None or args.huggingface_repo_visibility != "public" |
| | api = HfApi(token=token) |
| | if not exists_repo(repo_id=repo_id, repo_type=repo_type, token=token): |
| | try: |
| | api.create_repo(repo_id=repo_id, repo_type=repo_type, private=private) |
| | except Exception as e: |
| | logger.error("===========================================") |
| | logger.error(f"failed to create HuggingFace repo / HuggingFaceのリポジトリの作成に失敗しました : {e}") |
| | logger.error("===========================================") |
| |
|
| | is_folder = (type(src) == str and os.path.isdir(src)) or (isinstance(src, Path) and src.is_dir()) |
| |
|
| | def uploader(): |
| | try: |
| | if is_folder: |
| | api.upload_folder( |
| | repo_id=repo_id, |
| | repo_type=repo_type, |
| | folder_path=src, |
| | path_in_repo=path_in_repo, |
| | ) |
| | else: |
| | api.upload_file( |
| | repo_id=repo_id, |
| | repo_type=repo_type, |
| | path_or_fileobj=src, |
| | path_in_repo=path_in_repo, |
| | ) |
| | except Exception as e: |
| | logger.error("===========================================") |
| | logger.error(f"failed to upload to HuggingFace / HuggingFaceへのアップロードに失敗しました : {e}") |
| | logger.error("===========================================") |
| |
|
| | if args.async_upload and not force_sync_upload: |
| | fire_in_thread(uploader) |
| | else: |
| | uploader() |
| |
|
| |
|
| | def list_dir( |
| | repo_id: str, |
| | subfolder: str, |
| | repo_type: str, |
| | revision: str = "main", |
| | token: str = None, |
| | ): |
| | api = HfApi( |
| | token=token, |
| | ) |
| | repo_info = api.repo_info(repo_id=repo_id, revision=revision, repo_type=repo_type) |
| | file_list = [file for file in repo_info.siblings if file.rfilename.startswith(subfolder)] |
| | return file_list |
| |
|