File size: 5,208 Bytes
76d6ddf | 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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # Copyright 2020 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import sys
import traceback
from typing import Annotated
import click
from huggingface_hub import __version__, constants
from huggingface_hub.cli._cli_utils import check_cli_update, fallback_typer_group_factory, typer_factory
from huggingface_hub.cli._cp import CP_EXAMPLES, make_cp
from huggingface_hub.cli._errors import format_known_exception
from huggingface_hub.cli._output import out
from huggingface_hub.cli.auth import auth_cli
from huggingface_hub.cli.buckets import buckets_cli, sync
from huggingface_hub.cli.cache import cache_cli
from huggingface_hub.cli.collections import collections_cli
from huggingface_hub.cli.datasets import datasets_cli
from huggingface_hub.cli.discussions import discussions_cli
from huggingface_hub.cli.download import DOWNLOAD_EXAMPLES, download
from huggingface_hub.cli.extensions import (
dispatch_unknown_top_level_extension,
extensions_cli,
list_installed_extensions_for_help,
)
from huggingface_hub.cli.inference_endpoints import ie_cli
from huggingface_hub.cli.jobs import jobs_cli
from huggingface_hub.cli.lfs import lfs_enable_largefiles, lfs_multipart_upload
from huggingface_hub.cli.models import models_cli
from huggingface_hub.cli.papers import papers_cli
from huggingface_hub.cli.repo_files import repo_files_cli
from huggingface_hub.cli.repos import repos_cli
from huggingface_hub.cli.sandbox import sandbox_cli
from huggingface_hub.cli.skills import skills_cli
from huggingface_hub.cli.spaces import spaces_cli
from huggingface_hub.cli.system import env, update, version
from huggingface_hub.cli.upload import UPLOAD_EXAMPLES, upload
from huggingface_hub.cli.upload_large_folder import UPLOAD_LARGE_FOLDER_EXAMPLES, upload_large_folder
from huggingface_hub.cli.webhooks import webhooks_cli
from huggingface_hub.utils import logging
from ._completion import _COMPLETE_VAR, InstallCompletionOpt, ShowCompletionOpt
from ._framework import Option
app = typer_factory(
help="Hugging Face Hub CLI",
cls=fallback_typer_group_factory(
dispatch_unknown_top_level_extension,
extra_commands_provider=list_installed_extensions_for_help,
),
)
def _version_callback(value: bool) -> None:
if value:
print(__version__)
raise click.exceptions.Exit()
@app.group_callback(invoke_without_command=True)
def app_callback(
version: Annotated[
bool | None, Option("-v", "--version", callback=_version_callback, is_eager=True, hidden=True)
] = None,
install_completion: InstallCompletionOpt = False,
show_completion: ShowCompletionOpt = False,
) -> None:
pass
# top level single commands (defined in their respective files)
app.command(examples=CP_EXAMPLES)(make_cp())
app.command()(sync)
app.command(examples=DOWNLOAD_EXAMPLES)(download)
app.command(examples=UPLOAD_EXAMPLES)(upload)
app.command(examples=UPLOAD_LARGE_FOLDER_EXAMPLES)(upload_large_folder)
app.command(topic="help")(env)
app.command(topic="help")(update)
app.command(topic="help")(version)
app.command(hidden=True)(lfs_enable_largefiles)
app.command(hidden=True)(lfs_multipart_upload)
# command groups
app.add_group(auth_cli, name="auth")
app.add_group(buckets_cli, name="buckets")
app.add_group(cache_cli, name="cache")
app.add_group(collections_cli, name="collections")
app.add_group(datasets_cli, name="datasets")
app.add_group(discussions_cli, name="discussions")
app.add_group(jobs_cli, name="jobs")
app.add_group(models_cli, name="models")
app.add_group(papers_cli, name="papers")
app.add_group(repos_cli, name="repos | repo")
app.add_group(repo_files_cli, name="repo-files", hidden=True)
app.add_group(sandbox_cli, name="sandbox")
app.add_group(skills_cli, name="skills")
app.add_group(spaces_cli, name="spaces")
app.add_group(webhooks_cli, name="webhooks")
app.add_group(ie_cli, name="endpoints")
app.add_group(extensions_cli, name="extensions | ext")
def main():
# Shell-completion requests must stay fast and emit nothing but candidates:
# skip the startup work and let click handle the env var inside `app()`.
if _COMPLETE_VAR not in os.environ:
if not constants.HF_DEBUG:
logging.set_verbosity_info()
check_cli_update("huggingface_hub")
try:
app()
except Exception as e:
message = format_known_exception(e)
if message:
out.error(message)
if constants.HF_DEBUG:
traceback.print_exc()
else:
out.hint("set HF_DEBUG=1 as environment variable for full traceback.")
sys.exit(1)
raise
if __name__ == "__main__":
main()
|