hfutils 0.4.1__tar.gz → 0.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. {hfutils-0.4.1/hfutils.egg-info → hfutils-0.4.3}/PKG-INFO +22 -22
  2. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/config/meta.py +1 -1
  3. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/index/fetch.py +66 -39
  4. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/index/local_fetch.py +12 -1
  5. {hfutils-0.4.1 → hfutils-0.4.3/hfutils.egg-info}/PKG-INFO +22 -22
  6. {hfutils-0.4.1 → hfutils-0.4.3}/LICENSE +0 -0
  7. {hfutils-0.4.1 → hfutils-0.4.3}/MANIFEST.in +0 -0
  8. {hfutils-0.4.1 → hfutils-0.4.3}/README.md +0 -0
  9. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/__init__.py +0 -0
  10. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/__main__.py +0 -0
  11. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/archive/__init__.py +0 -0
  12. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/archive/base.py +0 -0
  13. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/archive/rar.py +0 -0
  14. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/archive/sevenz.py +0 -0
  15. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/archive/tar.py +0 -0
  16. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/archive/zip.py +0 -0
  17. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/cache/__init__.py +0 -0
  18. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/cache/delete.py +0 -0
  19. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/config/__init__.py +0 -0
  20. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/__init__.py +0 -0
  21. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/base.py +0 -0
  22. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/cli.py +0 -0
  23. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/clone.py +0 -0
  24. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/dispatch.py +0 -0
  25. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/download.py +0 -0
  26. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/ils.py +0 -0
  27. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/index.py +0 -0
  28. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/ls.py +0 -0
  29. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/ls_repo.py +0 -0
  30. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/rollback.py +0 -0
  31. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/tree.py +0 -0
  32. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/upload.py +0 -0
  33. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/entry/whoami.py +0 -0
  34. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/index/__init__.py +0 -0
  35. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/index/hash.py +0 -0
  36. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/index/make.py +0 -0
  37. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/index/validate.py +0 -0
  38. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/operate/__init__.py +0 -0
  39. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/operate/base.py +0 -0
  40. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/operate/download.py +0 -0
  41. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/operate/upload.py +0 -0
  42. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/operate/validate.py +0 -0
  43. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/repository/__init__.py +0 -0
  44. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/repository/base.py +0 -0
  45. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/repository/clone.py +0 -0
  46. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/repository/rollback.py +0 -0
  47. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/__init__.py +0 -0
  48. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/archive.py +0 -0
  49. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/binary.py +0 -0
  50. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/data.py +0 -0
  51. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/download.py +0 -0
  52. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/irregular_repo.json +0 -0
  53. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/logging.py +0 -0
  54. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/model.py +0 -0
  55. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/number.py +0 -0
  56. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/path.py +0 -0
  57. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/session.py +0 -0
  58. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/temp.py +0 -0
  59. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/tqdm_.py +0 -0
  60. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/type_.py +0 -0
  61. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils/utils/walk.py +0 -0
  62. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils.egg-info/SOURCES.txt +0 -0
  63. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils.egg-info/dependency_links.txt +0 -0
  64. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils.egg-info/entry_points.txt +0 -0
  65. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils.egg-info/requires.txt +0 -0
  66. {hfutils-0.4.1 → hfutils-0.4.3}/hfutils.egg-info/top_level.txt +0 -0
  67. {hfutils-0.4.1 → hfutils-0.4.3}/requirements-7z.txt +0 -0
  68. {hfutils-0.4.1 → hfutils-0.4.3}/requirements-build.txt +0 -0
  69. {hfutils-0.4.1 → hfutils-0.4.3}/requirements-doc.txt +0 -0
  70. {hfutils-0.4.1 → hfutils-0.4.3}/requirements-rar.txt +0 -0
  71. {hfutils-0.4.1 → hfutils-0.4.3}/requirements-test.txt +0 -0
  72. {hfutils-0.4.1 → hfutils-0.4.3}/requirements-transfer.txt +0 -0
  73. {hfutils-0.4.1 → hfutils-0.4.3}/requirements.txt +0 -0
  74. {hfutils-0.4.1 → hfutils-0.4.3}/setup.cfg +0 -0
  75. {hfutils-0.4.1 → hfutils-0.4.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hfutils
3
- Version: 0.4.1
3
+ Version: 0.4.3
4
4
  Summary: Useful utilities for huggingface
5
5
  Home-page: https://github.com/deepghs/hfutils
6
6
  Author: narugo1992
@@ -30,28 +30,13 @@ Requires-Dist: natsort
30
30
  Requires-Dist: urlobject
31
31
  Requires-Dist: fsspec>=2024
32
32
  Requires-Dist: random_user_agent
33
- Provides-Extra: test
34
- Requires-Dist: coverage>=5; extra == "test"
35
- Requires-Dist: mock>=4.0.3; extra == "test"
36
- Requires-Dist: flake8~=3.5; extra == "test"
37
- Requires-Dist: testfixtures>=6.18.5; extra == "test"
38
- Requires-Dist: pytest~=6.2.5; extra == "test"
39
- Requires-Dist: pytest-cov~=3.0.0; extra == "test"
40
- Requires-Dist: pytest-mock~=3.6.1; extra == "test"
41
- Requires-Dist: pytest-xdist>=1.34.0; extra == "test"
42
- Requires-Dist: pytest-rerunfailures~=10.2; extra == "test"
43
- Requires-Dist: pytest-timeout~=2.0.2; extra == "test"
44
- Requires-Dist: pytest-benchmark~=3.4.0; extra == "test"
45
- Requires-Dist: easydict<2,>=1.7; extra == "test"
46
- Requires-Dist: testtools>=2; extra == "test"
47
- Requires-Dist: where>=1.0.2; extra == "test"
48
- Requires-Dist: responses>=0.20.0; extra == "test"
49
- Requires-Dist: natsort; extra == "test"
50
- Provides-Extra: rar
51
- Requires-Dist: rarfile; extra == "rar"
52
33
  Provides-Extra: build
53
34
  Requires-Dist: pyinstaller<5,>=4.7; extra == "build"
54
35
  Requires-Dist: setuptools<70; extra == "build"
36
+ Provides-Extra: 7z
37
+ Requires-Dist: py7zr; extra == "7z"
38
+ Provides-Extra: rar
39
+ Requires-Dist: rarfile; extra == "rar"
55
40
  Provides-Extra: doc
56
41
  Requires-Dist: Jinja2>=3.0.0; extra == "doc"
57
42
  Requires-Dist: sphinx>=3.2.0; extra == "doc"
@@ -72,10 +57,25 @@ Requires-Dist: ipykernel>=6.15; extra == "doc"
72
57
  Requires-Dist: py-cpuinfo>=8.0.0; extra == "doc"
73
58
  Requires-Dist: click>=7.0.0; extra == "doc"
74
59
  Requires-Dist: pandas; extra == "doc"
60
+ Provides-Extra: test
61
+ Requires-Dist: coverage>=5; extra == "test"
62
+ Requires-Dist: mock>=4.0.3; extra == "test"
63
+ Requires-Dist: flake8~=3.5; extra == "test"
64
+ Requires-Dist: testfixtures>=6.18.5; extra == "test"
65
+ Requires-Dist: pytest~=6.2.5; extra == "test"
66
+ Requires-Dist: pytest-cov~=3.0.0; extra == "test"
67
+ Requires-Dist: pytest-mock~=3.6.1; extra == "test"
68
+ Requires-Dist: pytest-xdist>=1.34.0; extra == "test"
69
+ Requires-Dist: pytest-rerunfailures~=10.2; extra == "test"
70
+ Requires-Dist: pytest-timeout~=2.0.2; extra == "test"
71
+ Requires-Dist: pytest-benchmark~=3.4.0; extra == "test"
72
+ Requires-Dist: easydict<2,>=1.7; extra == "test"
73
+ Requires-Dist: testtools>=2; extra == "test"
74
+ Requires-Dist: where>=1.0.2; extra == "test"
75
+ Requires-Dist: responses>=0.20.0; extra == "test"
76
+ Requires-Dist: natsort; extra == "test"
75
77
  Provides-Extra: transfer
76
78
  Requires-Dist: hf-transfer; extra == "transfer"
77
- Provides-Extra: 7z
78
- Requires-Dist: py7zr; extra == "7z"
79
79
 
80
80
  # hfutils
81
81
 
@@ -7,7 +7,7 @@ Overview:
7
7
  __TITLE__ = 'hfutils'
8
8
 
9
9
  #: Version of this project.
10
- __VERSION__ = '0.4.1'
10
+ __VERSION__ = '0.4.3'
11
11
 
12
12
  #: Short description of the project, will be included in ``setup.py``.
13
13
  __DESCRIPTION__ = 'Useful utilities for huggingface'
@@ -6,6 +6,7 @@ from typing import Optional, Dict, Union, List
6
6
 
7
7
  from huggingface_hub.file_download import http_get, hf_hub_url
8
8
  from huggingface_hub.utils import build_hf_headers
9
+ from tqdm import tqdm
9
10
 
10
11
  from .hash import _f_sha256
11
12
  from ..operate.base import RepoTypeTyping, get_hf_client
@@ -438,23 +439,27 @@ def hf_tar_file_download(repo_id: str, archive_in_repo: str, file_in_archive: st
438
439
  idx_repo_type: Optional[RepoTypeTyping] = None, idx_revision: Optional[str] = None,
439
440
  proxies: Optional[Dict] = None, user_agent: Union[Dict, str, None] = None,
440
441
  headers: Optional[Dict[str, str]] = None, endpoint: Optional[str] = None,
441
- hf_token: Optional[str] = None):
442
+ force_download: bool = False, silent: bool = False, hf_token: Optional[str] = None):
442
443
  """
443
- Download a file from a tar archive file in a Hugging Face repository.
444
+ Download a specific file from a tar archive stored in a Hugging Face repository.
444
445
 
445
- :param repo_id: The identifier of the repository.
446
+ This function allows you to extract and download a single file from a tar archive
447
+ that is hosted in a Hugging Face repository. It handles authentication, supports
448
+ different repository types, and can work with separate index repositories.
449
+
450
+ :param repo_id: The identifier of the repository containing the tar archive.
446
451
  :type repo_id: str
447
- :param archive_in_repo: The path to the archive file in the repository.
452
+ :param archive_in_repo: The path to the tar archive file within the repository.
448
453
  :type archive_in_repo: str
449
- :param file_in_archive: The path to the file inside the archive.
454
+ :param file_in_archive: The path to the desired file inside the tar archive.
450
455
  :type file_in_archive: str
451
- :param local_file: The path to save the downloaded file locally.
456
+ :param local_file: The local path where the downloaded file will be saved.
452
457
  :type local_file: str
453
- :param repo_type: The type of the Hugging Face repository.
458
+ :param repo_type: The type of the Hugging Face repository (e.g., 'dataset', 'model', 'space').
454
459
  :type repo_type: RepoTypeTyping, optional
455
- :param revision: The revision of the repository.
460
+ :param revision: The specific revision of the repository to use.
456
461
  :type revision: str, optional
457
- :param idx_repo_id: The identifier of the index repository.
462
+ :param idx_repo_id: The identifier of a separate index repository, if applicable.
458
463
  :type idx_repo_id: str, optional
459
464
  :param idx_file_in_repo: The path to the index file in the index repository.
460
465
  :type idx_file_in_repo: str, optional
@@ -462,44 +467,58 @@ def hf_tar_file_download(repo_id: str, archive_in_repo: str, file_in_archive: st
462
467
  :type idx_repo_type: RepoTypeTyping, optional
463
468
  :param idx_revision: The revision of the index repository.
464
469
  :type idx_revision: str, optional
465
- :param proxies: The proxies to be used for the HTTP request.
470
+ :param proxies: Proxy settings for the HTTP request.
466
471
  :type proxies: Dict, optional
467
- :param user_agent: The user agent for the HTTP request.
472
+ :param user_agent: Custom user agent for the HTTP request.
468
473
  :type user_agent: Union[Dict, str, None], optional
469
- :param headers: The additional headers for the HTTP request.
474
+ :param headers: Additional headers for the HTTP request.
470
475
  :type headers: Dict[str, str], optional
471
- :param endpoint: The Hugging Face API endpoint.
476
+ :param endpoint: Custom Hugging Face API endpoint.
472
477
  :type endpoint: str, optional
473
- :param hf_token: The Hugging Face access token.
478
+ :param force_download: If True, force re-download even if the file exists locally.
479
+ :type force_download: bool
480
+ :param silent: If True, suppress progress bar output.
481
+ :type silent: bool
482
+ :param hf_token: Hugging Face authentication token.
474
483
  :type hf_token: str, optional
475
- :raises FileNotFoundError: Raise this when file not exist in tar archive.
476
- :raises ArchiveStandaloneFileIncompleteDownload: Raise when download incomplete.
477
- :raises ArchiveStandaloneFileHashNotMatch: Raise when download hash not match.
478
484
 
479
- Examples::
480
- >>> from hfutils.index import hf_tar_file_download
481
- >>>
482
- >>> hf_tar_file_download(
483
- ... repo_id='deepghs/danbooru_newest',
484
- ... archive_in_repo='images/0000.tar',
485
- ... file_in_archive='7506000.jpg',
486
- ... local_file='test_example.jpg' # download destination
487
- ... )
485
+ :raises FileNotFoundError: If the specified file is not found in the tar archive.
486
+ :raises ArchiveStandaloneFileIncompleteDownload: If the download is incomplete.
487
+ :raises ArchiveStandaloneFileHashNotMatch: If the downloaded file's hash doesn't match the expected hash.
488
+
489
+ This function performs several steps:
490
+
491
+ 1. Retrieves the index of the tar archive.
492
+ 2. Checks if the desired file exists in the archive.
493
+ 3. Constructs the download URL and headers.
494
+ 4. Checks if the file already exists locally and matches the expected size and hash.
495
+ 5. Downloads the file if necessary, using byte range requests for efficiency.
496
+ 6. Verifies the downloaded file's size and hash.
497
+
498
+ Usage examples:
499
+ 1. Basic usage:
500
+ >>> hf_tar_file_download(
501
+ ... repo_id='deepghs/danbooru_newest',
502
+ ... archive_in_repo='images/0000.tar',
503
+ ... file_in_archive='7506000.jpg',
504
+ ... local_file='test_example.jpg' # download destination
505
+ ... )
506
+
507
+ 2. Using a separate index repository:
508
+ >>> hf_tar_file_download(
509
+ ... repo_id='nyanko7/danbooru2023',
510
+ ... idx_repo_id='deepghs/danbooru2023_index',
511
+ ... archive_in_repo='original/data-0000.tar',
512
+ ... file_in_archive='1000.png',
513
+ ... local_file='test_example.png' # download destination
514
+ ... )
488
515
 
489
516
  .. note::
490
517
 
491
- Besides, if the tar and index files are in different repositories, you can also use this function to
492
- download the given file by explicitly assigning the ``idx_repo_id`` argument.
493
-
494
- >>> from hfutils.index import hf_tar_file_download
495
- >>>
496
- >>> hf_tar_file_download(
497
- ... repo_id='nyanko7/danbooru2023',
498
- ... idx_repo_id='deepghs/danbooru2023_index',
499
- ... archive_in_repo='original/data-0000.tar',
500
- ... file_in_archive='1000.png',
501
- ... local_file='test_example.png' # download destination
502
- ... )
518
+ - This function is particularly useful for efficiently downloading single files from large tar archives
519
+ without having to download the entire archive.
520
+ - It supports authentication via the `hf_token` parameter, which is crucial for accessing private repositories.
521
+ - The function includes checks to avoid unnecessary downloads and to ensure the integrity of the downloaded file.
503
522
  """
504
523
  index = hf_tar_get_index(
505
524
  repo_id=repo_id,
@@ -533,10 +552,17 @@ def hf_tar_file_download(repo_id: str, archive_in_repo: str, file_in_archive: st
533
552
  end_bytes = info['offset'] + info['size'] - 1
534
553
  headers['Range'] = f'bytes={start_bytes}-{end_bytes}'
535
554
 
555
+ if not force_download and os.path.exists(local_file) and \
556
+ os.path.isfile(local_file) and os.path.getsize(local_file) == info['size']:
557
+ _expected_sha256 = info.get('sha256')
558
+ if not _expected_sha256 or _f_sha256(local_file) == _expected_sha256:
559
+ # file already ready, no need to download it again
560
+ return
561
+
536
562
  if os.path.dirname(local_file):
537
563
  os.makedirs(os.path.dirname(local_file), exist_ok=True)
538
564
  try:
539
- with open(local_file, 'wb') as f:
565
+ with open(local_file, 'wb') as f, tqdm(disable=True) as empty_tqdm:
540
566
  if info['size'] > 0:
541
567
  http_get(
542
568
  url_to_download,
@@ -546,6 +572,7 @@ def hf_tar_file_download(repo_id: str, archive_in_repo: str, file_in_archive: st
546
572
  headers=headers,
547
573
  expected_size=info['size'],
548
574
  displayed_filename=file_in_archive,
575
+ _tqdm_bar=empty_tqdm if silent else None,
549
576
  )
550
577
 
551
578
  if os.path.getsize(local_file) != info['size']:
@@ -171,7 +171,7 @@ def tar_file_size(archive_file: str, file_in_archive: str, idx_file: Optional[st
171
171
 
172
172
 
173
173
  def tar_file_download(archive_file: str, file_in_archive: str, local_file: str,
174
- idx_file: Optional[str] = None, chunk_size: int = 1 << 20):
174
+ idx_file: Optional[str] = None, chunk_size: int = 1 << 20, force_download: bool = False):
175
175
  """
176
176
  Extract and download a specific file from the tar archive to a local file.
177
177
 
@@ -190,6 +190,10 @@ def tar_file_download(archive_file: str, file_in_archive: str, local_file: str,
190
190
  :type idx_file: Optional[str]
191
191
  :param chunk_size: The size of chunks to read and write, in bytes. Default is 1MB.
192
192
  :type chunk_size: int
193
+ :param force_download: Force download the file to destination path.
194
+ Defualt to `False`, downloading will be skipped if the local file
195
+ is fully matched with expected file.
196
+ :type force_download: bool
193
197
 
194
198
  :raises FileNotFoundError: If the specified file is not found in the archive.
195
199
  :raises ArchiveStandaloneFileIncompleteDownload: If the downloaded file size doesn't match the expected size.
@@ -212,6 +216,13 @@ def tar_file_download(archive_file: str, file_in_archive: str, local_file: str,
212
216
 
213
217
  info = files[_n_path(file_in_archive)]
214
218
 
219
+ if not force_download and os.path.exists(local_file) and \
220
+ os.path.isfile(local_file) and os.path.getsize(local_file) == info['size']:
221
+ _expected_sha256 = info.get('sha256')
222
+ if not _expected_sha256 or _f_sha256(local_file) == _expected_sha256:
223
+ # file already ready, no need to download it again
224
+ return
225
+
215
226
  if os.path.dirname(local_file):
216
227
  os.makedirs(os.path.dirname(local_file), exist_ok=True)
217
228
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hfutils
3
- Version: 0.4.1
3
+ Version: 0.4.3
4
4
  Summary: Useful utilities for huggingface
5
5
  Home-page: https://github.com/deepghs/hfutils
6
6
  Author: narugo1992
@@ -30,28 +30,13 @@ Requires-Dist: natsort
30
30
  Requires-Dist: urlobject
31
31
  Requires-Dist: fsspec>=2024
32
32
  Requires-Dist: random_user_agent
33
- Provides-Extra: test
34
- Requires-Dist: coverage>=5; extra == "test"
35
- Requires-Dist: mock>=4.0.3; extra == "test"
36
- Requires-Dist: flake8~=3.5; extra == "test"
37
- Requires-Dist: testfixtures>=6.18.5; extra == "test"
38
- Requires-Dist: pytest~=6.2.5; extra == "test"
39
- Requires-Dist: pytest-cov~=3.0.0; extra == "test"
40
- Requires-Dist: pytest-mock~=3.6.1; extra == "test"
41
- Requires-Dist: pytest-xdist>=1.34.0; extra == "test"
42
- Requires-Dist: pytest-rerunfailures~=10.2; extra == "test"
43
- Requires-Dist: pytest-timeout~=2.0.2; extra == "test"
44
- Requires-Dist: pytest-benchmark~=3.4.0; extra == "test"
45
- Requires-Dist: easydict<2,>=1.7; extra == "test"
46
- Requires-Dist: testtools>=2; extra == "test"
47
- Requires-Dist: where>=1.0.2; extra == "test"
48
- Requires-Dist: responses>=0.20.0; extra == "test"
49
- Requires-Dist: natsort; extra == "test"
50
- Provides-Extra: rar
51
- Requires-Dist: rarfile; extra == "rar"
52
33
  Provides-Extra: build
53
34
  Requires-Dist: pyinstaller<5,>=4.7; extra == "build"
54
35
  Requires-Dist: setuptools<70; extra == "build"
36
+ Provides-Extra: 7z
37
+ Requires-Dist: py7zr; extra == "7z"
38
+ Provides-Extra: rar
39
+ Requires-Dist: rarfile; extra == "rar"
55
40
  Provides-Extra: doc
56
41
  Requires-Dist: Jinja2>=3.0.0; extra == "doc"
57
42
  Requires-Dist: sphinx>=3.2.0; extra == "doc"
@@ -72,10 +57,25 @@ Requires-Dist: ipykernel>=6.15; extra == "doc"
72
57
  Requires-Dist: py-cpuinfo>=8.0.0; extra == "doc"
73
58
  Requires-Dist: click>=7.0.0; extra == "doc"
74
59
  Requires-Dist: pandas; extra == "doc"
60
+ Provides-Extra: test
61
+ Requires-Dist: coverage>=5; extra == "test"
62
+ Requires-Dist: mock>=4.0.3; extra == "test"
63
+ Requires-Dist: flake8~=3.5; extra == "test"
64
+ Requires-Dist: testfixtures>=6.18.5; extra == "test"
65
+ Requires-Dist: pytest~=6.2.5; extra == "test"
66
+ Requires-Dist: pytest-cov~=3.0.0; extra == "test"
67
+ Requires-Dist: pytest-mock~=3.6.1; extra == "test"
68
+ Requires-Dist: pytest-xdist>=1.34.0; extra == "test"
69
+ Requires-Dist: pytest-rerunfailures~=10.2; extra == "test"
70
+ Requires-Dist: pytest-timeout~=2.0.2; extra == "test"
71
+ Requires-Dist: pytest-benchmark~=3.4.0; extra == "test"
72
+ Requires-Dist: easydict<2,>=1.7; extra == "test"
73
+ Requires-Dist: testtools>=2; extra == "test"
74
+ Requires-Dist: where>=1.0.2; extra == "test"
75
+ Requires-Dist: responses>=0.20.0; extra == "test"
76
+ Requires-Dist: natsort; extra == "test"
75
77
  Provides-Extra: transfer
76
78
  Requires-Dist: hf-transfer; extra == "transfer"
77
- Provides-Extra: 7z
78
- Requires-Dist: py7zr; extra == "7z"
79
79
 
80
80
  # hfutils
81
81
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes