# Copyright 2023-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{10..14} )
DISTUTILS_SINGLE_IMPL=1
inherit distutils-r1

DESCRIPTION="a client library to interact with the Hugging Face Hub"
HOMEPAGE="
	https://pypi.org/project/huggingface_hub/
"
SRC_URI="https://github.com/huggingface/${PN}/archive/refs/tags/v${PV}.tar.gz
	-> ${P}.gh.tar.gz"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="torch"

RDEPEND="
	$(python_gen_cond_dep '
		dev-python/filelock[${PYTHON_USEDEP}]
		dev-python/fsspec[${PYTHON_USEDEP}]
		dev-python/httpx[${PYTHON_USEDEP}]
		dev-python/packaging[${PYTHON_USEDEP}]
		dev-python/pyyaml[${PYTHON_USEDEP}]
		dev-python/shellingham[${PYTHON_USEDEP}]
		dev-python/tqdm[${PYTHON_USEDEP}]
		dev-python/typer[${PYTHON_USEDEP}]
		dev-python/typing-extensions[${PYTHON_USEDEP}]
		sci-ml/hf_xet[${PYTHON_USEDEP}]
		torch? (
			sci-ml/safetensors[${PYTHON_USEDEP}]
		)
	')
	torch? (
		sci-ml/caffe2[${PYTHON_SINGLE_USEDEP}]
		sci-ml/pytorch[${PYTHON_SINGLE_USEDEP}]
	)
"

BDEPEND="
	test? (
		sci-ml/pytorch[${PYTHON_SINGLE_USEDEP}]
		dev-vcs/git-lfs
	)
"

EPYTEST_PLUGINS=( pytest-asyncio pytest-mock )

distutils_enable_tests pytest

src_test() {
	local EPYTEST_IGNORE=(
		tests/test_file_download.py
		tests/test_hf_api.py
		tests/test_oauth.py
		tests/test_snapshot_download.py
		tests/test_webhooks_server.py
	)

	local EPYTEST_DESELECT=(
		tests/test_inference_client.py::TestOpenAsMimeBytes
		tests/test_inference_client.py::TestHeadersAndCookies
		tests/test_inference_client.py::test_as_url_with_pil_image
		tests/test_xet_upload.py::TestXetUpload::test_upload_file
		tests/test_xet_upload.py::TestXetUpload::test_upload_file_with_bytesio
		tests/test_xet_upload.py::TestXetUpload::test_upload_file_with_byte_array
		tests/test_xet_upload.py::TestXetUpload::test_fallback_to_lfs_when_xet_not_available
		tests/test_xet_upload.py::TestXetUpload::test_upload_folder
		tests/test_xet_upload.py::TestXetUpload::test_upload_folder_create_pr
		tests/test_xet_upload.py::TestXetLargeUpload
		tests/test_xet_upload.py::TestXetE2E::test_hf_xet_with_token_refresher
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_file_download_happens_once
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_file_download_happens_once_intra_revision
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_file_downloaded_in_cache
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_file_downloaded_in_cache
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_multiple_refs_for_same_file
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_no_exist_file_is_cached
		tests/test_cache_layout.py::CacheFileLayoutHfHubDownload::test_no_exist_file_is_cached
		tests/test_cache_layout.py::CacheFileLayoutSnapshotDownload
		tests/test_cache_layout.py::ReferenceUpdates::test_update_reference
		tests/test_cache_no_symlinks.py::TestCacheLayoutIfSymlinksNotSupported::test_download_no_symlink_existing_file
		tests/test_cache_no_symlinks.py::TestCacheLayoutIfSymlinksNotSupported::test_download_no_symlink_new_file
		tests/test_cache_no_symlinks.py::TestCacheLayoutIfSymlinksNotSupported::test_scan_and_delete_cache_no_symlinks
		tests/test_commit_scheduler.py::TestCommitScheduler::test_context_manager
		tests/test_commit_scheduler.py::TestCommitScheduler::test_missing_folder_is_created
		tests/test_commit_scheduler.py::TestCommitScheduler::test_mocked_push_to_hub
		tests/test_commit_scheduler.py::TestCommitScheduler::test_sync_and_squash_history
		tests/test_commit_scheduler.py::TestCommitScheduler::test_sync_local_folder
		tests/test_hf_file_system.py::HfFileSystemTests
		tests/test_hf_file_system.py::test_access_repositories_lists[foo]
		tests/test_hf_file_system.py::test_access_repositories_lists[datasets/foo]
		tests/test_hf_file_system.py::test_exists_after_repo_deletion
		tests/test_hf_file_system.py::test_hf_file_system_file_can_handle_gzipped_file
		tests/test_hub_mixin.py::HubMixinTest::test_from_pretrained_model_id_and_revision
		tests/test_hub_mixin.py::HubMixinTest::test_from_pretrained_model_id_only
		tests/test_hub_mixin.py::HubMixinTest::test_push_to_hub
		tests/test_hub_mixin_pytorch.py::PytorchHubMixinTest::test_from_pretrained_model_id_and_revision
		tests/test_hub_mixin_pytorch.py::PytorchHubMixinTest::test_from_pretrained_model_id_only
		tests/test_hub_mixin_pytorch.py::PytorchHubMixinTest::test_push_to_hub
		tests/test_inference_async_client.py::test_async_generate_timeout_error
		tests/test_inference_providers.py::TestHFInferenceProvider::test_prepare_mapping_info_unknown_task
		tests/test_offline_utils.py::test_offline_with_timeout
		tests/test_repocard.py::test_load_from_hub_if_repo_id_or_path_is_a_dir
		tests/test_repocard.py::RepocardMetadataUpdateTest
		tests/test_repocard.py::TestMetadataUpdateOnMissingCard
		tests/test_repocard.py::RepoCardTest::test_push_and_create_pr
		tests/test_repocard.py::RepoCardTest::test_push_to_hub
		tests/test_repocard.py::RepoCardTest::test_validate_repocard
		tests/test_repocard.py::SpaceCardTest::test_load_spacecard_from_hub
		tests/test_utils_cache.py::TestValidCacheUtils::test_scan_cache_on_valid_cache_unix
		tests/test_utils_cache.py::TestCorruptedCacheUtils
		tests/test_utils_http.py::TestUniqueRequestId
		tests/test_utils_http.py::test_client_get_request
		tests/test_utils_http.py::test_async_client_get_request
		tests/test_utils_pagination.py::TestPagination::test_paginate_hf_api
		tests/test_utils_telemetry.py::TestSendTelemetry::test_topic_multiple
		tests/test_utils_telemetry.py::TestSendTelemetry::test_topic_normal
		tests/test_utils_telemetry.py::TestSendTelemetry::test_topic_quoted
		tests/test_utils_telemetry.py::TestSendTelemetry::test_topic_with_subtopic
		tests/test_xet_download.py::TestXetFileDownload::test_get_xet_file_metadata_basic
		tests/test_xet_download.py::TestXetFileDownload::test_basic_download
		tests/test_xet_download.py::TestXetFileDownload::test_try_to_load_from_cache
		tests/test_xet_download.py::TestXetFileDownload::test_cache_reuse
		tests/test_xet_download.py::TestXetFileDownload::test_download_to_local_dir
		tests/test_xet_download.py::TestXetFileDownload::test_force_download
		tests/test_xet_download.py::TestXetSnapshotDownload
	)

	distutils-r1_src_test
}