rclone-api 1.0.99__tar.gz → 1.1.0__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 (80) hide show
  1. {rclone_api-1.0.99 → rclone_api-1.1.0}/PKG-INFO +1 -1
  2. {rclone_api-1.0.99 → rclone_api-1.1.0}/pyproject.toml +1 -1
  3. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/s3/chunk_uploader.py +30 -17
  4. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api.egg-info/PKG-INFO +1 -1
  5. {rclone_api-1.0.99 → rclone_api-1.1.0}/.aiderignore +0 -0
  6. {rclone_api-1.0.99 → rclone_api-1.1.0}/.github/workflows/lint.yml +0 -0
  7. {rclone_api-1.0.99 → rclone_api-1.1.0}/.github/workflows/push_macos.yml +0 -0
  8. {rclone_api-1.0.99 → rclone_api-1.1.0}/.github/workflows/push_ubuntu.yml +0 -0
  9. {rclone_api-1.0.99 → rclone_api-1.1.0}/.github/workflows/push_win.yml +0 -0
  10. {rclone_api-1.0.99 → rclone_api-1.1.0}/.gitignore +0 -0
  11. {rclone_api-1.0.99 → rclone_api-1.1.0}/.pylintrc +0 -0
  12. {rclone_api-1.0.99 → rclone_api-1.1.0}/.vscode/launch.json +0 -0
  13. {rclone_api-1.0.99 → rclone_api-1.1.0}/.vscode/settings.json +0 -0
  14. {rclone_api-1.0.99 → rclone_api-1.1.0}/.vscode/tasks.json +0 -0
  15. {rclone_api-1.0.99 → rclone_api-1.1.0}/LICENSE +0 -0
  16. {rclone_api-1.0.99 → rclone_api-1.1.0}/MANIFEST.in +0 -0
  17. {rclone_api-1.0.99 → rclone_api-1.1.0}/README.md +0 -0
  18. {rclone_api-1.0.99 → rclone_api-1.1.0}/clean +0 -0
  19. {rclone_api-1.0.99 → rclone_api-1.1.0}/install +0 -0
  20. {rclone_api-1.0.99 → rclone_api-1.1.0}/lint +0 -0
  21. {rclone_api-1.0.99 → rclone_api-1.1.0}/requirements.testing.txt +0 -0
  22. {rclone_api-1.0.99 → rclone_api-1.1.0}/setup.cfg +0 -0
  23. {rclone_api-1.0.99 → rclone_api-1.1.0}/setup.py +0 -0
  24. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/__init__.py +0 -0
  25. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/assets/example.txt +0 -0
  26. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/cli.py +0 -0
  27. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  28. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/cmd/list_files.py +0 -0
  29. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/completed_process.py +0 -0
  30. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/config.py +0 -0
  31. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/convert.py +0 -0
  32. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/deprecated.py +0 -0
  33. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/diff.py +0 -0
  34. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/dir.py +0 -0
  35. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/dir_listing.py +0 -0
  36. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/exec.py +0 -0
  37. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/experimental/flags.py +0 -0
  38. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/file.py +0 -0
  39. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/filelist.py +0 -0
  40. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/group_files.py +0 -0
  41. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/process.py +0 -0
  42. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/rclone.py +0 -0
  43. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/remote.py +0 -0
  44. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/rpath.py +0 -0
  45. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/s3/api.py +0 -0
  46. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/s3/basic_ops.py +0 -0
  47. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/s3/create.py +0 -0
  48. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/s3/types.py +0 -0
  49. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/scan_missing_folders.py +0 -0
  50. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/types.py +0 -0
  51. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/util.py +0 -0
  52. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api/walk.py +0 -0
  53. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  54. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  55. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api.egg-info/entry_points.txt +0 -0
  56. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api.egg-info/requires.txt +0 -0
  57. {rclone_api-1.0.99 → rclone_api-1.1.0}/src/rclone_api.egg-info/top_level.txt +0 -0
  58. {rclone_api-1.0.99 → rclone_api-1.1.0}/test +0 -0
  59. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/archive/test_paramiko.py.disabled +0 -0
  60. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_cmd_list_files.py +0 -0
  61. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_copy.py +0 -0
  62. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_copy_files.py +0 -0
  63. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_diff.py +0 -0
  64. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_group_files.py +0 -0
  65. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_is_synced.py +0 -0
  66. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_ls.py +0 -0
  67. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_mount.py +0 -0
  68. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_mount_s3.py +0 -0
  69. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_mount_webdav.py +0 -0
  70. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_mounted_ranged_download.py +0 -0
  71. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_obscure.py +0 -0
  72. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_rclone_config.py +0 -0
  73. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_remote_control.py +0 -0
  74. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_remotes.py +0 -0
  75. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_s3.py +0 -0
  76. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_scan_missing_folders.py +0 -0
  77. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_size_files.py +0 -0
  78. {rclone_api-1.0.99 → rclone_api-1.1.0}/tests/test_walk.py +0 -0
  79. {rclone_api-1.0.99 → rclone_api-1.1.0}/tox.ini +0 -0
  80. {rclone_api-1.0.99 → rclone_api-1.1.0}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.99
3
+ Version: 1.1.0
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -21,7 +21,7 @@ dependencies = [
21
21
  ]
22
22
 
23
23
  # Change this with the version number bump.
24
- version = "1.0.99"
24
+ version = "1.1.0"
25
25
 
26
26
  [tool.setuptools]
27
27
  package-dir = {"" = "src"}
@@ -1,3 +1,4 @@
1
+ import _thread
1
2
  import json
2
3
  import os
3
4
  import time
@@ -294,22 +295,23 @@ def file_chunker(
294
295
  chunk_size = upload_info.chunk_size
295
296
  src = Path(file_path)
296
297
  # Mounted files may take a while to appear, so keep retrying.
297
- file_size = _get_file_size(src, timeout=60)
298
- part_number = 1
299
- done_part_numbers: set[int] = {
300
- p.part_number for p in upload_state.parts if p is not None
301
- }
302
- num_parts = upload_info.total_chunks()
303
-
304
- def next_part_number() -> int | None:
305
- nonlocal part_number
306
- while part_number in done_part_numbers:
307
- part_number += 1
308
- if part_number > num_parts:
309
- return None
310
- return part_number
311
298
 
312
299
  try:
300
+ file_size = _get_file_size(src, timeout=60)
301
+ part_number = 1
302
+ done_part_numbers: set[int] = {
303
+ p.part_number for p in upload_state.parts if p is not None
304
+ }
305
+ num_parts = upload_info.total_chunks()
306
+
307
+ def next_part_number() -> int | None:
308
+ nonlocal part_number
309
+ while part_number in done_part_numbers:
310
+ part_number += 1
311
+ if part_number > num_parts:
312
+ return None
313
+ return part_number
314
+
313
315
  while not should_stop():
314
316
  curr_parth_num = next_part_number()
315
317
  if curr_parth_num is None:
@@ -433,6 +435,7 @@ def upload_file_multipart(
433
435
  chunk_size: int = 16 * 1024 * 1024, # Default chunk size is 16MB; can be overridden
434
436
  retries: int = 20,
435
437
  max_chunks_before_suspension: int | None = None,
438
+ abort_transfer_on_failure: bool = False,
436
439
  ) -> MultiUploadResult:
437
440
  """Upload a file to the bucket using multipart upload with customizable chunk size."""
438
441
  file_size = os.path.getsize(str(file_path))
@@ -494,7 +497,13 @@ def upload_file_multipart(
494
497
  output=filechunks,
495
498
  max_chunks=max_chunks_before_suspension,
496
499
  ) -> None:
497
- file_chunker(upload_state=upload_state, output=output, max_chunks=max_chunks)
500
+ try:
501
+ file_chunker(
502
+ upload_state=upload_state, output=output, max_chunks=max_chunks
503
+ )
504
+ except Exception:
505
+ _thread.interrupt_main()
506
+ raise
498
507
 
499
508
  try:
500
509
  thread_chunker = Thread(target=chunker_task, daemon=True)
@@ -507,7 +516,11 @@ def upload_file_multipart(
507
516
  break
508
517
 
509
518
  def task(upload_info=upload_info, file_chunk=file_chunk):
510
- return handle_upload(upload_info, file_chunk)
519
+ try:
520
+ return handle_upload(upload_info, file_chunk)
521
+ except Exception:
522
+ _thread.interrupt_main()
523
+ raise
511
524
 
512
525
  fut = executor.submit(task)
513
526
 
@@ -540,7 +553,7 @@ def upload_file_multipart(
540
553
  f"Multipart upload completed: {file_path} to {bucket_name}/{object_name}"
541
554
  )
542
555
  except Exception:
543
- if upload_info.upload_id:
556
+ if upload_info.upload_id and abort_transfer_on_failure:
544
557
  try:
545
558
  s3_client.abort_multipart_upload(
546
559
  Bucket=bucket_name, Key=object_name, UploadId=upload_info.upload_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.99
3
+ Version: 1.1.0
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
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