hf-xet 1.5.0.dev3__tar.gz → 1.5.1.dev0__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 (300) hide show
  1. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/Cargo.toml +8 -2
  2. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/PKG-INFO +1 -1
  3. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/Cargo.lock +23 -33
  4. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/Cargo.toml +1 -1
  5. hf_xet-1.5.1.dev0/hf_xet/src/background_progress.rs +168 -0
  6. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/lib.rs +1 -0
  7. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_file_download_group.rs +40 -25
  8. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_upload_commit.rs +40 -25
  9. hf_xet-1.5.1.dev0/xet_client/src/cas_client/chunk_window_builder.rs +393 -0
  10. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/interface.rs +16 -1
  11. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/mod.rs +1 -0
  12. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/remote_client.rs +46 -2
  13. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/retry_wrapper.rs +46 -1
  14. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_client.rs +29 -2
  15. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/server.rs +8 -0
  16. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/simulation_control_client.rs +11 -1
  17. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/memory_client.rs +38 -2
  18. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/simulation_client.rs +8 -0
  19. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/simulation_server.rs +8 -0
  20. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_types/mod.rs +39 -3
  21. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/disk.rs +1 -1
  22. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/merklehash/mod.rs +3 -0
  23. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/interpolation_search.rs +1 -1
  24. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/session_directory.rs +1 -1
  25. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_file_handle.rs +2 -2
  26. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_file_manager.rs +2 -7
  27. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_format.rs +1 -1
  28. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_in_memory.rs +2 -2
  29. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/streaming_shard.rs +58 -6
  30. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/xorb_structs.rs +1 -1
  31. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/byte_grouping/bg4_prediction.rs +2 -2
  32. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/byte_grouping/compression_stats/collect_compression_stats.rs +2 -2
  33. hf_xet-1.5.1.dev0/xet_core_structures/src/xorb_object/constants.rs +76 -0
  34. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/xorb_object_format.rs +19 -4
  35. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/chunking.rs +17 -6
  36. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/data_aggregator.rs +1 -1
  37. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/file_deduplication.rs +9 -6
  38. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/interface.rs +1 -1
  39. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/mod.rs +1 -1
  40. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/parallel chunking.lyx +52 -3
  41. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/parallel chunking.pdf +0 -0
  42. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/bin/example.rs +1 -1
  43. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/data_client.rs +4 -2
  44. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/file_cleaner.rs +43 -19
  45. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/file_upload_session.rs +59 -14
  46. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/mod.rs +3 -0
  47. hf_xet-1.5.1.dev0/xet_data/src/processing/range_upload.rs +2105 -0
  48. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/test_session_resume.rs +1 -1
  49. hf_xet-1.5.1.dev0/xet_data/tests/test_stable_chunk_boundary_detection.rs +312 -0
  50. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/file_download_group.rs +1 -1
  51. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/upload_commit.rs +0 -2
  52. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/client.rs +2 -2
  53. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/file_utils/safe_file_creator.rs +2 -2
  54. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/configuration_utils.rs +2 -2
  55. hf_xet-1.5.0.dev3/xet_core_structures/src/xorb_object/constants.rs +0 -29
  56. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/README.md +0 -0
  57. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/.gitignore +0 -0
  58. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/LICENSE +0 -0
  59. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/README.md +0 -0
  60. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/config.rs +0 -0
  61. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/headers.rs +0 -0
  62. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/legacy/functions.rs +0 -0
  63. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/legacy/mod.rs +0 -0
  64. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/legacy/progress_update.rs +0 -0
  65. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/legacy/runtime.rs +0 -0
  66. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/legacy/token_refresh.rs +0 -0
  67. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/legacy/types.rs +0 -0
  68. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/logging.rs +0 -0
  69. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/profiling.rs +0 -0
  70. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_download_stream_group.rs +0 -0
  71. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_download_stream_handle.rs +0 -0
  72. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_file_download_handle.rs +0 -0
  73. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_file_upload_handle.rs +0 -0
  74. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_stream_upload_handle.rs +0 -0
  75. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/py_xet_session.rs +0 -0
  76. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/src/utils.rs +0 -0
  77. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/conftest.py +0 -0
  78. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/test_config.py +0 -0
  79. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/test_file_download.py +0 -0
  80. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/test_progress.py +0 -0
  81. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/test_session.py +0 -0
  82. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/test_stream_download.py +0 -0
  83. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/hf_xet/tests/test_upload_commit.py +0 -0
  84. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/pyproject.toml +0 -0
  85. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/Cargo.toml +0 -0
  86. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/README.md +0 -0
  87. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/adaptive_concurrency/controller.rs +0 -0
  88. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/adaptive_concurrency/exp_weighted_olr.rs +0 -0
  89. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/adaptive_concurrency/mod.rs +0 -0
  90. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/adaptive_concurrency/rtt_prediction.rs +0 -0
  91. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/auth.rs +0 -0
  92. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/exports.rs +0 -0
  93. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/multipart.rs +0 -0
  94. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/progress_tracked_streams.rs +0 -0
  95. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/client_testing_utils.rs +0 -0
  96. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/client_unit_testing.rs +0 -0
  97. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/deletion_controls.rs +0 -0
  98. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/deletion_unit_testing.rs +0 -0
  99. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/direct_access_client.rs +0 -0
  100. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/handlers.rs +0 -0
  101. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/latency_simulation.rs +0 -0
  102. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/main.rs +0 -0
  103. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/mod.rs +0 -0
  104. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/simulation_handlers.rs +0 -0
  105. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/local_server/simulation_types.rs +0 -0
  106. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/mod.rs +0 -0
  107. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/network_simulation/bandwidth_limit_router.rs +0 -0
  108. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/network_simulation/mod.rs +0 -0
  109. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/network_simulation/network_profile.rs +0 -0
  110. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/random_xorb.rs +0 -0
  111. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/socket_proxy.rs +0 -0
  112. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_client/simulation/xorb_utils.rs +0 -0
  113. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/cas_types/key.rs +0 -0
  114. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/bin/analysis.rs +0 -0
  115. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/cache_manager.rs +0 -0
  116. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/disk/cache_file_header.rs +0 -0
  117. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/disk/cache_item.rs +0 -0
  118. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/disk/test_utils.rs +0 -0
  119. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/error.rs +0 -0
  120. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/chunk_cache/mod.rs +0 -0
  121. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/common/auth/basics.rs +0 -0
  122. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/common/auth/interface.rs +0 -0
  123. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/common/auth.rs +0 -0
  124. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/common/http_client.rs +0 -0
  125. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/common/mod.rs +0 -0
  126. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/error.rs +0 -0
  127. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/hub_client/client.rs +0 -0
  128. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/hub_client/mod.rs +0 -0
  129. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/hub_client/types.rs +0 -0
  130. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/src/lib.rs +0 -0
  131. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_client/tests/test_shard_upload_timeout.rs +0 -0
  132. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/Cargo.toml +0 -0
  133. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/README.md +0 -0
  134. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/benches/bg_split_regroup_bench.rs +0 -0
  135. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/benches/compression_bench.rs +0 -0
  136. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/data_structures/mod.rs +0 -0
  137. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/error.rs +0 -0
  138. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/lib.rs +0 -0
  139. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/merklehash/aggregated_hashes.rs +0 -0
  140. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/merklehash/data_hash.rs +0 -0
  141. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/merklehash/merkle_hash_subtree.rs +0 -0
  142. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/merklehash/passthrough_hasher.rs +0 -0
  143. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/merklehash/passthrough_hashmap.rs +0 -0
  144. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/chunk_verification.rs +0 -0
  145. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/constants.rs +0 -0
  146. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/file_structs.rs +0 -0
  147. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/mod.rs +0 -0
  148. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/set_operations.rs +0 -0
  149. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_benchmark.rs +0 -0
  150. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_file.rs +0 -0
  151. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/shard_file_reconstructor.rs +0 -0
  152. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/metadata_shard/utils.rs +0 -0
  153. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/utils/exp_weighted_moving_avg.rs +0 -0
  154. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/utils/mod.rs +0 -0
  155. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/utils/serialization_utils.rs +0 -0
  156. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/byte_grouping/bg4.rs +0 -0
  157. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/byte_grouping/bg4_prediction_benchmark.rs +0 -0
  158. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/byte_grouping/compression_stats/compression_prediction_tests.py +0 -0
  159. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/byte_grouping/mod.rs +0 -0
  160. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/chunk.rs +0 -0
  161. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/compression_scheme.rs +0 -0
  162. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/mod.rs +0 -0
  163. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/raw_xorb_data.rs +0 -0
  164. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/xorb_chunk_format/deserialize_async.rs +0 -0
  165. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_core_structures/src/xorb_object/xorb_chunk_format.rs +0 -0
  166. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/Cargo.toml +0 -0
  167. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/README.md +0 -0
  168. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/benches/reconstruction_bench.rs +0 -0
  169. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/examples/chunk/main.rs +0 -0
  170. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/examples/hash/main.rs +0 -0
  171. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/examples/xorb-check/main.rs +0 -0
  172. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/dedup_metrics.rs +0 -0
  173. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/deduplication/defrag_prevention.rs +0 -0
  174. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/error.rs +0 -0
  175. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/data_writer/data_writer.rs +0 -0
  176. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/data_writer/download_stream.rs +0 -0
  177. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/data_writer/mod.rs +0 -0
  178. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/data_writer/sequential_writer.rs +0 -0
  179. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/data_writer/unordered_download_stream.rs +0 -0
  180. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/data_writer/unordered_writer.rs +0 -0
  181. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/error.rs +0 -0
  182. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/file_reconstructor.rs +0 -0
  183. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/mod.rs +0 -0
  184. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/reconstruction_terms/file_term.rs +0 -0
  185. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/reconstruction_terms/manager.rs +0 -0
  186. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/reconstruction_terms/mod.rs +0 -0
  187. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/reconstruction_terms/retrieval_urls.rs +0 -0
  188. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/reconstruction_terms/xorb_block.rs +0 -0
  189. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/file_reconstruction/run_state.rs +0 -0
  190. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/lib.rs +0 -0
  191. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/bin/xtool.rs +0 -0
  192. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/configurations.rs +0 -0
  193. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/constants.rs +0 -0
  194. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/deduplication_interface.rs +0 -0
  195. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/file_download_session.rs +0 -0
  196. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/migration_tool/hub_client_token_refresher.rs +0 -0
  197. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/migration_tool/migrate.rs +0 -0
  198. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/migration_tool/mod.rs +0 -0
  199. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/remote_client_interface.rs +0 -0
  200. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/sha256.rs +0 -0
  201. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/shard_interface.rs +0 -0
  202. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/test_utils.rs +0 -0
  203. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/processing/xet_file.rs +0 -0
  204. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/progress_tracking/mod.rs +0 -0
  205. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/progress_tracking/progress_types.rs +0 -0
  206. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/progress_tracking/speed_tracker.rs +0 -0
  207. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/src/progress_tracking/upload_tracking.rs +0 -0
  208. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/integration_tests/initialize.sh +0 -0
  209. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/integration_tests/test_basic_clean_smudge.sh +0 -0
  210. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/integration_tests.rs +0 -0
  211. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/test_clean_smudge.rs +0 -0
  212. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/test_clean_smudge_multirange.rs +0 -0
  213. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/test_full_file_download.rs +0 -0
  214. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/test_range_downloads.rs +0 -0
  215. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_data/tests/test_unordered_download.rs +0 -0
  216. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/Cargo.toml +0 -0
  217. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/README.md +0 -0
  218. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/examples/example.rs +0 -0
  219. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/examples/example_sync.rs +0 -0
  220. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/error.rs +0 -0
  221. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/legacy/data_client.rs +0 -0
  222. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/legacy/mod.rs +0 -0
  223. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/legacy/progress_tracking/callback_bridge.rs +0 -0
  224. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/legacy/progress_tracking/mod.rs +0 -0
  225. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/legacy/progress_tracking/progress_verification_wrapper.rs +0 -0
  226. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/lib.rs +0 -0
  227. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/auth_group_builder.rs +0 -0
  228. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/common.rs +0 -0
  229. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/download_stream_group.rs +0 -0
  230. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/download_stream_handle.rs +0 -0
  231. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/errors.rs +0 -0
  232. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/file_download_handle.rs +0 -0
  233. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/mod.rs +0 -0
  234. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/session.rs +0 -0
  235. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/task_runtime.rs +0 -0
  236. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/upload_file_handle.rs +0 -0
  237. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/src/xet_session/upload_stream_handle.rs +0 -0
  238. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/tests/test_legacy_data_client.rs +0 -0
  239. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_pkg/tests/test_xet_session.rs +0 -0
  240. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/Cargo.toml +0 -0
  241. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/README.md +0 -0
  242. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/aliases.rs +0 -0
  243. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/error.rs +0 -0
  244. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/chunk_cache.rs +0 -0
  245. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/data.rs +0 -0
  246. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/deduplication.rs +0 -0
  247. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/log.rs +0 -0
  248. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/mod.rs +0 -0
  249. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/reconstruction.rs +0 -0
  250. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/session.rs +0 -0
  251. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/shard.rs +0 -0
  252. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/system_monitor.rs +0 -0
  253. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/groups/xorb.rs +0 -0
  254. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/macros.rs +0 -0
  255. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/mod.rs +0 -0
  256. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/python.rs +0 -0
  257. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/config/xet_config.rs +0 -0
  258. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/cache_dir.rs +0 -0
  259. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/common.rs +0 -0
  260. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/context.rs +0 -0
  261. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/exports.rs +0 -0
  262. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/file_handle_limits.rs +0 -0
  263. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/mod.rs +0 -0
  264. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/par_utils.rs +0 -0
  265. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/runtime.rs +0 -0
  266. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/core/sync_primatives.rs +0 -0
  267. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/error.rs +0 -0
  268. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/error_printer/mod.rs +0 -0
  269. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/fd_diagnostics.rs +0 -0
  270. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/file_utils/file_metadata.rs +0 -0
  271. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/file_utils/mod.rs +0 -0
  272. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/file_utils/privilege_context.rs +0 -0
  273. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/lib.rs +0 -0
  274. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/logging/config.rs +0 -0
  275. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/logging/constants.rs +0 -0
  276. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/logging/init.rs +0 -0
  277. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/logging/mod.rs +0 -0
  278. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/logging/system_monitor.rs +0 -0
  279. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/adjustable_semaphore.rs +0 -0
  280. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/async_iterator.rs +0 -0
  281. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/async_read.rs +0 -0
  282. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/byte_size.rs +0 -0
  283. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/config_enum.rs +0 -0
  284. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/errors.rs +0 -0
  285. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/file_paths.rs +0 -0
  286. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/guards.rs +0 -0
  287. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/limited_joinset.rs +0 -0
  288. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/mod.rs +0 -0
  289. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/output_bytes.rs +0 -0
  290. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/pipe.rs +0 -0
  291. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/rw_task_lock.rs +0 -0
  292. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/singleflight.rs +0 -0
  293. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/src/utils/unique_id.rs +0 -0
  294. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/bin/log_test_executable.rs +0 -0
  295. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/config_env_test.rs +0 -0
  296. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/config_values_test.rs +0 -0
  297. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/integration_tests.rs +0 -0
  298. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/primary_config_test.rs +0 -0
  299. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/test_error.rs +0 -0
  300. {hf_xet-1.5.0.dev3 → hf_xet-1.5.1.dev0}/xet_runtime/tests/test_option.rs +0 -0
@@ -12,7 +12,13 @@ members = [
12
12
  "git_xet",
13
13
  "simulation",
14
14
  ]
15
- exclude = ["simulation/chunk_cache_bench", "hf_xet", "wasm/hf_xet_wasm", "wasm/hf_xet_thin_wasm"]
15
+ exclude = [
16
+ "simulation/chunk_cache_bench",
17
+ "hf_xet",
18
+ "wasm/hf_xet_wasm",
19
+ "wasm/hf_xet_thin_wasm",
20
+ "examples/xet_pkg_napi",
21
+ ]
16
22
 
17
23
  [workspace.package]
18
24
  version = "1.5.2"
@@ -52,7 +58,7 @@ console-subscriber = "0.5"
52
58
  countio = { version = "0.3", features = ["futures"] }
53
59
  crc32fast = "1.5"
54
60
  csv = "1"
55
- ctor = "0.6"
61
+ ctor = "1"
56
62
  dirs = "6.0"
57
63
  futures = "0.3"
58
64
  humantime = "2.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hf-xet
3
- Version: 1.5.0.dev3
3
+ Version: 1.5.1.dev0
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: License :: OSI Approved :: Apache Software License
6
6
  Classifier: Programming Language :: Rust
@@ -633,20 +633,14 @@ dependencies = [
633
633
 
634
634
  [[package]]
635
635
  name = "ctor"
636
- version = "0.6.3"
636
+ version = "1.0.3"
637
637
  source = "registry+https://github.com/rust-lang/crates.io-index"
638
- checksum = "424e0138278faeb2b401f174ad17e715c829512d74f3d1e81eb43365c2e0590e"
638
+ checksum = "5c24d2b2b7c12a2fffb7c5c8fd0dcda7ca14b4600fa2d3701b6079aefb6fa180"
639
639
  dependencies = [
640
- "ctor-proc-macro",
641
- "dtor",
640
+ "link-section",
641
+ "linktime-proc-macro",
642
642
  ]
643
643
 
644
- [[package]]
645
- name = "ctor-proc-macro"
646
- version = "0.0.7"
647
- source = "registry+https://github.com/rust-lang/crates.io-index"
648
- checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1"
649
-
650
644
  [[package]]
651
645
  name = "debugid"
652
646
  version = "0.8.0"
@@ -707,21 +701,6 @@ dependencies = [
707
701
  "syn",
708
702
  ]
709
703
 
710
- [[package]]
711
- name = "dtor"
712
- version = "0.1.1"
713
- source = "registry+https://github.com/rust-lang/crates.io-index"
714
- checksum = "404d02eeb088a82cfd873006cb713fe411306c7d182c344905e101fb1167d301"
715
- dependencies = [
716
- "dtor-proc-macro",
717
- ]
718
-
719
- [[package]]
720
- name = "dtor-proc-macro"
721
- version = "0.0.6"
722
- source = "registry+https://github.com/rust-lang/crates.io-index"
723
- checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5"
724
-
725
704
  [[package]]
726
705
  name = "dunce"
727
706
  version = "1.0.5"
@@ -1110,7 +1089,7 @@ dependencies = [
1110
1089
 
1111
1090
  [[package]]
1112
1091
  name = "hf_xet"
1113
- version = "1.5.0-dev3"
1092
+ version = "1.5.1-dev0"
1114
1093
  dependencies = [
1115
1094
  "async-trait",
1116
1095
  "hf-xet",
@@ -1617,6 +1596,18 @@ dependencies = [
1617
1596
  "libc",
1618
1597
  ]
1619
1598
 
1599
+ [[package]]
1600
+ name = "link-section"
1601
+ version = "0.15.0"
1602
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1603
+ checksum = "4641b91711debb59c61b07eb5e30521ed6d9e2bdd9fd04f934e7da3a5bc386d4"
1604
+
1605
+ [[package]]
1606
+ name = "linktime-proc-macro"
1607
+ version = "0.1.0"
1608
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1609
+ checksum = "a44cd706ff0d503ee32b2071166510ca27e281228de10cd3aa8d35ff94560f81"
1610
+
1620
1611
  [[package]]
1621
1612
  name = "linux-raw-sys"
1622
1613
  version = "0.12.1"
@@ -1875,15 +1866,14 @@ checksum = "269bca4c2591a28585d6bf10d9ed0332b7d76900a1b02bec41bdc3a2cdcda107"
1875
1866
 
1876
1867
  [[package]]
1877
1868
  name = "openssl"
1878
- version = "0.10.76"
1869
+ version = "0.10.79"
1879
1870
  source = "registry+https://github.com/rust-lang/crates.io-index"
1880
- checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf"
1871
+ checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542"
1881
1872
  dependencies = [
1882
1873
  "bitflags 2.11.0",
1883
1874
  "cfg-if 1.0.4",
1884
1875
  "foreign-types",
1885
1876
  "libc",
1886
- "once_cell",
1887
1877
  "openssl-macros",
1888
1878
  "openssl-sys",
1889
1879
  ]
@@ -1916,9 +1906,9 @@ dependencies = [
1916
1906
 
1917
1907
  [[package]]
1918
1908
  name = "openssl-sys"
1919
- version = "0.9.112"
1909
+ version = "0.9.115"
1920
1910
  source = "registry+https://github.com/rust-lang/crates.io-index"
1921
- checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb"
1911
+ checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781"
1922
1912
  dependencies = [
1923
1913
  "cc",
1924
1914
  "libc",
@@ -2553,9 +2543,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
2553
2543
 
2554
2544
  [[package]]
2555
2545
  name = "rustls-webpki"
2556
- version = "0.103.10"
2546
+ version = "0.103.13"
2557
2547
  source = "registry+https://github.com/rust-lang/crates.io-index"
2558
- checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
2548
+ checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
2559
2549
  dependencies = [
2560
2550
  "aws-lc-rs",
2561
2551
  "ring",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "hf_xet"
3
- version = "1.5.0-dev3"
3
+ version = "1.5.1-dev0"
4
4
  edition = "2024"
5
5
  license = "Apache-2.0"
6
6
  readme = "README.md"
@@ -0,0 +1,168 @@
1
+ //! Background progress callbacks for upload commits and download groups.
2
+ //!
3
+ //! A dedicated thread polls Rust-side progress atomics and invokes a Python
4
+ //! callable via [`Python::try_attach`]. The poller sleeps on a condvar so
5
+ //! [`BackgroundProgress::stop_and_join`] can wake it immediately instead of
6
+ //! waiting for the full poll interval.
7
+
8
+ use std::collections::HashMap;
9
+ use std::sync::{Arc, Condvar, Mutex};
10
+ use std::thread::JoinHandle;
11
+ use std::time::Duration;
12
+
13
+ use pyo3::exceptions::PyRuntimeError;
14
+ use pyo3::prelude::*;
15
+ use xet_pkg::xet_session::{GroupProgressReport, ItemProgressReport, UniqueId};
16
+
17
+ fn lock_poisoned_err() -> PyErr {
18
+ PyRuntimeError::new_err("progress poller lock poisoned")
19
+ }
20
+
21
+ fn poller_panicked_err() -> PyErr {
22
+ PyRuntimeError::new_err("progress poller thread panicked")
23
+ }
24
+
25
+ /// Background thread that polls progress and invokes a Python callback.
26
+ pub(crate) struct BackgroundProgress {
27
+ /// ``false`` while the poller is running; set to ``true`` in ``stop_and_join``.
28
+ /// Paired with the condvar so setting shutdown wakes a thread blocked in
29
+ /// ``wait_timeout`` (the mutex is released for the duration of the wait).
30
+ wake: Arc<(Mutex<bool>, Condvar)>,
31
+ join: Mutex<Option<JoinHandle<PyResult<()>>>>,
32
+ callback: Py<PyAny>,
33
+ }
34
+
35
+ impl BackgroundProgress {
36
+ /// Spawn a thread that calls ``snapshot`` every ``interval_ms`` until shutdown,
37
+ /// the snapshot reports a terminal task state, or the callback fails.
38
+ pub(crate) fn spawn<F>(py: Python<'_>, callback: Py<PyAny>, interval_ms: u64, mut snapshot: F) -> Self
39
+ where
40
+ F: FnMut() -> (GroupProgressReport, HashMap<UniqueId, ItemProgressReport>, bool) + Send + 'static,
41
+ {
42
+ let wake = Arc::new((Mutex::new(false), Condvar::new()));
43
+ let wake_for_thread = Arc::clone(&wake);
44
+ let callback_for_thread = callback.clone_ref(py);
45
+ let interval = Duration::from_millis(interval_ms);
46
+
47
+ let join = std::thread::spawn(move || {
48
+ progress_thread_loop(callback_for_thread, interval, &wake_for_thread, &mut snapshot)
49
+ });
50
+
51
+ Self {
52
+ wake,
53
+ join: Mutex::new(Some(join)),
54
+ callback,
55
+ }
56
+ }
57
+
58
+ /// Request shutdown, wake the poller if it is sleeping, and block until the thread exits.
59
+ pub(crate) fn stop_and_join(&self) -> PyResult<()> {
60
+ {
61
+ let mut guard = self.wake.0.lock().map_err(|_| lock_poisoned_err())?;
62
+ *guard = true;
63
+ }
64
+ self.wake.1.notify_one();
65
+ let handle = self.join.lock().map_err(|_| lock_poisoned_err())?.take();
66
+ if let Some(handle) = handle {
67
+ match handle.join() {
68
+ Ok(result) => result,
69
+ Err(_) => Err(poller_panicked_err()),
70
+ }
71
+ } else {
72
+ Ok(())
73
+ }
74
+ }
75
+
76
+ /// Stop the poller, then invoke the callback once on the calling thread (final snapshot).
77
+ pub(crate) fn stop_and_emit<F>(&self, py: Python<'_>, snapshot: F) -> PyResult<()>
78
+ where
79
+ F: FnOnce() -> (GroupProgressReport, HashMap<UniqueId, ItemProgressReport>),
80
+ {
81
+ self.stop_and_join()?;
82
+ let (group_report, item_reports) = snapshot();
83
+ self.callback.call1(py, (group_report, item_reports))?;
84
+ Ok(())
85
+ }
86
+ }
87
+
88
+ fn progress_thread_loop<F>(
89
+ callback: Py<PyAny>,
90
+ interval: Duration,
91
+ wake: &Arc<(Mutex<bool>, Condvar)>,
92
+ snapshot: &mut F,
93
+ ) -> PyResult<()>
94
+ where
95
+ F: FnMut() -> (GroupProgressReport, HashMap<UniqueId, ItemProgressReport>, bool),
96
+ {
97
+ loop {
98
+ // Sleep up to `interval`, but return promptly when stop_and_join sets shutdown and notifies.
99
+ let shutdown = {
100
+ let guard = wake.0.lock().map_err(|_| lock_poisoned_err())?;
101
+ let (guard, _) = wake.1.wait_timeout(guard, interval).map_err(|_| lock_poisoned_err())?;
102
+ *guard
103
+ };
104
+
105
+ if shutdown {
106
+ break;
107
+ }
108
+
109
+ // Mutex is not held across snapshot or the Python callback.
110
+ let (group_report, item_reports, is_terminal) = snapshot();
111
+
112
+ match Python::try_attach(|py| callback.call1(py, (group_report, item_reports))) {
113
+ None => break, // interpreter shutting down
114
+ Some(Ok(_)) => {},
115
+ Some(Err(e)) => {
116
+ let _ = Python::try_attach(|py| e.print(py));
117
+ break;
118
+ },
119
+ }
120
+
121
+ if is_terminal {
122
+ break;
123
+ }
124
+ }
125
+ Ok(())
126
+ }
127
+
128
+ #[cfg(test)]
129
+ mod tests {
130
+ use std::collections::HashMap;
131
+ use std::time::{Duration, Instant};
132
+
133
+ use pyo3::Python;
134
+ use pyo3::ffi::c_str;
135
+ use xet_pkg::xet_session::GroupProgressReport;
136
+
137
+ use super::*;
138
+
139
+ #[test]
140
+ fn stop_and_join_returns_before_poll_interval_elapses() {
141
+ /// Poll interval long enough that a blocking sleep would fail the test.
142
+ const LONG_INTERVAL_MS: u64 = 60_000;
143
+ const STOP_DEADLINE: Duration = Duration::from_secs(2);
144
+
145
+ Python::attach(|py| -> PyResult<()> {
146
+ py.run(c_str!("def _bg_progress_test_cb(_group, _items): pass"), None, None)?;
147
+ let callback: Py<PyAny> = py.eval(c_str!("_bg_progress_test_cb"), None, None)?.unbind();
148
+
149
+ let progress = BackgroundProgress::spawn(py, callback, LONG_INTERVAL_MS, || {
150
+ (GroupProgressReport::default(), HashMap::new(), false)
151
+ });
152
+
153
+ // Let the poller enter its timed wait on the condvar.
154
+ std::thread::sleep(Duration::from_millis(50));
155
+
156
+ let start = Instant::now();
157
+ progress.stop_and_join()?;
158
+ let elapsed = start.elapsed();
159
+
160
+ assert!(
161
+ elapsed < STOP_DEADLINE,
162
+ "stop_and_join took {elapsed:?}; expected prompt return (poll interval is {LONG_INTERVAL_MS}ms)"
163
+ );
164
+ Ok(())
165
+ })
166
+ .unwrap();
167
+ }
168
+ }
@@ -1,3 +1,4 @@
1
+ mod background_progress;
1
2
  pub mod config;
2
3
  mod headers;
3
4
  mod legacy;
@@ -1,6 +1,5 @@
1
1
  use std::collections::HashMap;
2
2
  use std::sync::{Arc, RwLock};
3
- use std::time::Duration;
4
3
 
5
4
  use pyo3::prelude::*;
6
5
  use xet_pkg::xet_session::{
@@ -8,11 +7,22 @@ use xet_pkg::xet_session::{
8
7
  XetFileInfo, XetSession, XetTaskState,
9
8
  };
10
9
 
10
+ use crate::background_progress::BackgroundProgress;
11
11
  use crate::headers::{build_header_map, build_headers_with_user_agent};
12
12
  use crate::py_file_download_handle::PyXetFileDownload;
13
13
  use crate::utils::{progress_display, task_state_display, task_state_to_pystate};
14
14
  use crate::{PyXetTaskState, blocking_call_with_signal_check, convert_xet_error};
15
15
 
16
+ #[inline]
17
+ fn item_reports_from_download_handles(
18
+ handles: &Arc<RwLock<Vec<XetFileDownload>>>,
19
+ ) -> HashMap<UniqueId, ItemProgressReport> {
20
+ handles
21
+ .read()
22
+ .map(|g| g.iter().filter_map(|h| h.progress().map(|p| (h.task_id(), p))).collect())
23
+ .unwrap_or_default()
24
+ }
25
+
16
26
  // ── build_file_download_group ─────────────────────────────────────────────────
17
27
 
18
28
  /// Create an :class:`XetFileDownloadGroup` from a session and optional configuration.
@@ -51,38 +61,24 @@ pub(crate) fn build_file_download_group(
51
61
  .map_err(convert_xet_error)
52
62
  })?;
53
63
 
54
- let download_handles = if let Some(callback) = progress_callback {
64
+ let (download_handles, progress) = if let Some(callback) = progress_callback {
55
65
  let handles: Arc<RwLock<Vec<XetFileDownload>>> = Arc::new(RwLock::new(Vec::new()));
56
66
  let inner = group.clone();
57
67
  let handles_for_thread = Arc::clone(&handles);
58
- let interval = Duration::from_millis(progress_interval_ms);
59
- std::thread::spawn(move || {
60
- loop {
61
- std::thread::sleep(interval);
62
- let is_terminal = !matches!(inner.status(), Ok(XetTaskState::Running) | Ok(XetTaskState::Finalizing));
63
- let group_report = inner.progress();
64
- let item_reports: HashMap<UniqueId, ItemProgressReport> = handles_for_thread
65
- .read()
66
- .map(|g| g.iter().filter_map(|h| h.progress().map(|p| (h.task_id(), p))).collect())
67
- .unwrap_or_default();
68
- let result = Python::attach(|py| callback.call1(py, (group_report, item_reports)));
69
- if let Err(e) = result {
70
- Python::attach(|py| e.print(py));
71
- break;
72
- }
73
- if is_terminal {
74
- break;
75
- }
76
- }
68
+ let progress = BackgroundProgress::spawn(py, callback, progress_interval_ms, move || {
69
+ let is_terminal = !matches!(inner.status(), Ok(XetTaskState::Running) | Ok(XetTaskState::Finalizing));
70
+ let item_reports = item_reports_from_download_handles(&handles_for_thread);
71
+ (inner.progress(), item_reports, is_terminal)
77
72
  });
78
- Some(handles)
73
+ (Some(handles), Some(progress))
79
74
  } else {
80
- None
75
+ (None, None)
81
76
  };
82
77
 
83
78
  Ok(PyXetFileDownloadGroup {
84
79
  inner: group,
85
80
  download_handles,
81
+ progress,
86
82
  })
87
83
  }
88
84
 
@@ -103,6 +99,9 @@ pub struct PyXetFileDownloadGroup {
103
99
  pub(crate) inner: XetFileDownloadGroup,
104
100
  /// Per-file handles shared with the progress thread; None when no callback was registered.
105
101
  download_handles: Option<Arc<RwLock<Vec<XetFileDownload>>>>,
102
+ /// Background thread that polls progress and invokes the Python callback; None when no
103
+ /// callback was registered. Stopped and joined from ``wait_to_finish`` and ``abort``.
104
+ progress: Option<BackgroundProgress>,
106
105
  }
107
106
 
108
107
  #[pymethods]
@@ -144,7 +143,7 @@ impl PyXetFileDownloadGroup {
144
143
  // Normal exit: wait for all downloads (signal-interruptible).
145
144
  self.wait_to_finish(py)?;
146
145
  } else {
147
- if let Err(e) = self.inner.abort() {
146
+ if let Err(e) = self.abort() {
148
147
  tracing::warn!("abort() failed during __exit__ exception path: {e}");
149
148
  }
150
149
  }
@@ -188,13 +187,27 @@ impl PyXetFileDownloadGroup {
188
187
  ///
189
188
  /// Releases the GIL while waiting, polling for ``KeyboardInterrupt`` every
190
189
  /// 100 ms so that Ctrl-C is delivered promptly.
190
+ ///
191
+ /// When a progress callback was registered, it is invoked once more on the
192
+ /// calling thread with the final snapshot after all work completes.
191
193
  pub fn wait_to_finish(&self, py: Python<'_>) -> PyResult<XetDownloadGroupReport> {
192
194
  let group = self.inner.clone();
193
- blocking_call_with_signal_check(py, move || group.finish_blocking())
195
+ let result = blocking_call_with_signal_check(py, move || group.finish_blocking());
196
+ if let (Some(handles), Some(progress)) = (&self.download_handles, &self.progress) {
197
+ // ignore any error from progress update
198
+ let _ = progress.stop_and_emit(py, || {
199
+ let item_reports = item_reports_from_download_handles(handles);
200
+ (self.inner.progress(), item_reports)
201
+ });
202
+ }
203
+ result
194
204
  }
195
205
 
196
206
  /// Cancel all active downloads in this group.
197
207
  pub fn abort(&self) -> PyResult<()> {
208
+ if let Some(progress) = &self.progress {
209
+ progress.stop_and_join()?;
210
+ }
198
211
  self.inner.abort().map_err(convert_xet_error)
199
212
  }
200
213
 
@@ -236,6 +249,7 @@ mod tests {
236
249
  .build_blocking()
237
250
  .unwrap(),
238
251
  download_handles: None,
252
+ progress: None,
239
253
  };
240
254
 
241
255
  Python::attach(|py| {
@@ -257,6 +271,7 @@ mod tests {
257
271
  .build_blocking()
258
272
  .unwrap(),
259
273
  download_handles: None,
274
+ progress: None,
260
275
  };
261
276
 
262
277
  Python::attach(|py| {
@@ -1,6 +1,5 @@
1
1
  use std::collections::HashMap;
2
2
  use std::sync::{Arc, RwLock};
3
- use std::time::Duration;
4
3
 
5
4
  use pyo3::prelude::*;
6
5
  use xet_pkg::xet_session::{
@@ -62,12 +61,23 @@ fn parse_sha256(py: Python<'_>, sha256: Option<Py<PyAny>>) -> PyResult<Sha256Pol
62
61
  }
63
62
  }
64
63
 
64
+ use crate::background_progress::BackgroundProgress;
65
65
  use crate::headers::{build_header_map, build_headers_with_user_agent};
66
66
  use crate::py_file_upload_handle::PyXetFileUpload;
67
67
  use crate::py_stream_upload_handle::PyXetStreamUpload;
68
68
  use crate::utils::{progress_display, task_state_display, task_state_to_pystate};
69
69
  use crate::{PyXetTaskState, blocking_call_with_signal_check, convert_xet_error};
70
70
 
71
+ #[inline]
72
+ fn item_reports_from_upload_handles(
73
+ handles: &Arc<RwLock<Vec<XetFileUpload>>>,
74
+ ) -> HashMap<UniqueId, ItemProgressReport> {
75
+ handles
76
+ .read()
77
+ .map(|g| g.iter().filter_map(|h| h.progress().map(|p| (h.task_id(), p))).collect())
78
+ .unwrap_or_default()
79
+ }
80
+
71
81
  // ── build_upload_commit ───────────────────────────────────────────────────────
72
82
 
73
83
  /// Create an :class:`XetUploadCommit` from a session and optional configuration.
@@ -106,38 +116,24 @@ pub(crate) fn build_upload_commit(
106
116
  .map_err(convert_xet_error)
107
117
  })?;
108
118
 
109
- let upload_handles = if let Some(callback) = progress_callback {
119
+ let (upload_handles, background_progress) = if let Some(callback) = progress_callback {
110
120
  let handles: Arc<RwLock<Vec<XetFileUpload>>> = Arc::new(RwLock::new(Vec::new()));
111
121
  let inner = commit.clone();
112
122
  let handles_for_thread = handles.clone();
113
- let interval = Duration::from_millis(progress_interval_ms);
114
- std::thread::spawn(move || {
115
- loop {
116
- std::thread::sleep(interval);
117
- let is_terminal = !matches!(inner.status(), Ok(XetTaskState::Running) | Ok(XetTaskState::Finalizing));
118
- let group_report = inner.progress();
119
- let item_reports: HashMap<UniqueId, ItemProgressReport> = handles_for_thread
120
- .read()
121
- .map(|g| g.iter().filter_map(|h| h.progress().map(|p| (h.task_id(), p))).collect())
122
- .unwrap_or_default();
123
- let result = Python::attach(|py| callback.call1(py, (group_report, item_reports)));
124
- if let Err(e) = result {
125
- Python::attach(|py| e.print(py));
126
- break;
127
- }
128
- if is_terminal {
129
- break;
130
- }
131
- }
123
+ let background_progress = BackgroundProgress::spawn(py, callback, progress_interval_ms, move || {
124
+ let is_terminal = !matches!(inner.status(), Ok(XetTaskState::Running) | Ok(XetTaskState::Finalizing));
125
+ let item_reports = item_reports_from_upload_handles(&handles_for_thread);
126
+ (inner.progress(), item_reports, is_terminal)
132
127
  });
133
- Some(handles)
128
+ (Some(handles), Some(background_progress))
134
129
  } else {
135
- None
130
+ (None, None)
136
131
  };
137
132
 
138
133
  Ok(PyXetUploadCommit {
139
134
  inner: commit,
140
135
  upload_handles,
136
+ background_progress,
141
137
  })
142
138
  }
143
139
 
@@ -158,6 +154,9 @@ pub struct PyXetUploadCommit {
158
154
  pub(crate) inner: XetUploadCommit,
159
155
  /// Per-file handles shared with the progress thread; None when no callback was registered.
160
156
  upload_handles: Option<Arc<RwLock<Vec<XetFileUpload>>>>,
157
+ /// Background thread that polls progress and invokes the Python callback; None when no
158
+ /// callback was registered. Stopped and joined from ``wait_to_finish`` and ``abort``.
159
+ background_progress: Option<BackgroundProgress>,
161
160
  }
162
161
 
163
162
  #[pymethods]
@@ -205,7 +204,7 @@ impl PyXetUploadCommit {
205
204
  self.wait_to_finish(py)?;
206
205
  } else {
207
206
  // Exception: cancel uploads.
208
- if let Err(e) = self.inner.abort() {
207
+ if let Err(e) = self.abort() {
209
208
  tracing::warn!("abort() failed during __exit__ exception path: {e}");
210
209
  }
211
210
  }
@@ -308,13 +307,27 @@ impl PyXetUploadCommit {
308
307
  ///
309
308
  /// Releases the GIL while waiting, polling for ``KeyboardInterrupt`` every
310
309
  /// 100 ms so that Ctrl-C is delivered promptly.
310
+ ///
311
+ /// When a progress callback was registered, it is invoked once more on the
312
+ /// calling thread with the final snapshot after all work completes.
311
313
  pub fn wait_to_finish(&self, py: Python<'_>) -> PyResult<XetCommitReport> {
312
314
  let inner = self.inner.clone();
313
- blocking_call_with_signal_check(py, move || inner.commit_blocking())
315
+ let result = blocking_call_with_signal_check(py, move || inner.commit_blocking());
316
+ if let (Some(handles), Some(progress)) = (&self.upload_handles, &self.background_progress) {
317
+ // ignore any error from progress update
318
+ let _ = progress.stop_and_emit(py, || {
319
+ let item_reports = item_reports_from_upload_handles(handles);
320
+ (self.inner.progress(), item_reports)
321
+ });
322
+ }
323
+ result
314
324
  }
315
325
 
316
326
  /// Cancel all active uploads in this commit.
317
327
  pub fn abort(&self) -> PyResult<()> {
328
+ if let Some(progress) = &self.background_progress {
329
+ progress.stop_and_join()?;
330
+ }
318
331
  self.inner.abort().map_err(convert_xet_error)
319
332
  }
320
333
 
@@ -408,6 +421,7 @@ mod tests {
408
421
  .build_blocking()
409
422
  .unwrap(),
410
423
  upload_handles: None,
424
+ background_progress: None,
411
425
  };
412
426
 
413
427
  Python::attach(|py| {
@@ -437,6 +451,7 @@ mod tests {
437
451
  .build_blocking()
438
452
  .unwrap(),
439
453
  upload_handles: None,
454
+ background_progress: None,
440
455
  };
441
456
 
442
457
  Python::attach(|py| {