rclone-api 1.1.21__tar.gz → 1.1.23__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 (84) hide show
  1. {rclone_api-1.1.21 → rclone_api-1.1.23}/PKG-INFO +2 -1
  2. {rclone_api-1.1.21 → rclone_api-1.1.23}/pyproject.toml +2 -1
  3. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/cmd/copy_large_s3.py +2 -2
  4. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/chunk_types.py +2 -0
  5. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/chunk_uploader.py +20 -14
  6. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/create.py +1 -1
  7. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api.egg-info/PKG-INFO +2 -1
  8. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api.egg-info/requires.txt +1 -0
  9. {rclone_api-1.1.21 → rclone_api-1.1.23}/.aiderignore +0 -0
  10. {rclone_api-1.1.21 → rclone_api-1.1.23}/.github/workflows/lint.yml +0 -0
  11. {rclone_api-1.1.21 → rclone_api-1.1.23}/.github/workflows/push_macos.yml +0 -0
  12. {rclone_api-1.1.21 → rclone_api-1.1.23}/.github/workflows/push_ubuntu.yml +0 -0
  13. {rclone_api-1.1.21 → rclone_api-1.1.23}/.github/workflows/push_win.yml +0 -0
  14. {rclone_api-1.1.21 → rclone_api-1.1.23}/.gitignore +0 -0
  15. {rclone_api-1.1.21 → rclone_api-1.1.23}/.pylintrc +0 -0
  16. {rclone_api-1.1.21 → rclone_api-1.1.23}/.vscode/launch.json +0 -0
  17. {rclone_api-1.1.21 → rclone_api-1.1.23}/.vscode/settings.json +0 -0
  18. {rclone_api-1.1.21 → rclone_api-1.1.23}/.vscode/tasks.json +0 -0
  19. {rclone_api-1.1.21 → rclone_api-1.1.23}/LICENSE +0 -0
  20. {rclone_api-1.1.21 → rclone_api-1.1.23}/MANIFEST.in +0 -0
  21. {rclone_api-1.1.21 → rclone_api-1.1.23}/README.md +0 -0
  22. {rclone_api-1.1.21 → rclone_api-1.1.23}/clean +0 -0
  23. {rclone_api-1.1.21 → rclone_api-1.1.23}/install +0 -0
  24. {rclone_api-1.1.21 → rclone_api-1.1.23}/lint +0 -0
  25. {rclone_api-1.1.21 → rclone_api-1.1.23}/requirements.testing.txt +0 -0
  26. {rclone_api-1.1.21 → rclone_api-1.1.23}/setup.cfg +0 -0
  27. {rclone_api-1.1.21 → rclone_api-1.1.23}/setup.py +0 -0
  28. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/__init__.py +0 -0
  29. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/assets/example.txt +0 -0
  30. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/cli.py +0 -0
  31. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/cmd/list_files.py +0 -0
  32. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/completed_process.py +0 -0
  33. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/config.py +0 -0
  34. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/convert.py +0 -0
  35. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/deprecated.py +0 -0
  36. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/diff.py +0 -0
  37. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/dir.py +0 -0
  38. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/dir_listing.py +0 -0
  39. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/exec.py +0 -0
  40. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/experimental/flags.py +0 -0
  41. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/experimental/flags_base.py +0 -0
  42. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/file.py +0 -0
  43. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/filelist.py +0 -0
  44. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/group_files.py +0 -0
  45. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/mount.py +0 -0
  46. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/process.py +0 -0
  47. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/rclone.py +0 -0
  48. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/remote.py +0 -0
  49. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/rpath.py +0 -0
  50. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/api.py +0 -0
  51. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/basic_ops.py +0 -0
  52. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/chunk_file.py +0 -0
  53. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/s3/types.py +0 -0
  54. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/scan_missing_folders.py +0 -0
  55. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/types.py +0 -0
  56. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/util.py +0 -0
  57. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api/walk.py +0 -0
  58. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  59. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  60. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api.egg-info/entry_points.txt +0 -0
  61. {rclone_api-1.1.21 → rclone_api-1.1.23}/src/rclone_api.egg-info/top_level.txt +0 -0
  62. {rclone_api-1.1.21 → rclone_api-1.1.23}/test +0 -0
  63. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/archive/test_paramiko.py.disabled +0 -0
  64. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_cmd_list_files.py +0 -0
  65. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_copy.py +0 -0
  66. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_copy_files.py +0 -0
  67. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_diff.py +0 -0
  68. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_group_files.py +0 -0
  69. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_is_synced.py +0 -0
  70. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_ls.py +0 -0
  71. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_mount.py +0 -0
  72. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_mount_s3.py +0 -0
  73. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_mounted_ranged_download.py +0 -0
  74. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_obscure.py +0 -0
  75. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_rclone_config.py +0 -0
  76. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_remote_control.py +0 -0
  77. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_remotes.py +0 -0
  78. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_s3.py +0 -0
  79. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_scan_missing_folders.py +0 -0
  80. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_size_files.py +0 -0
  81. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_size_suffix.py +0 -0
  82. {rclone_api-1.1.21 → rclone_api-1.1.23}/tests/test_walk.py +0 -0
  83. {rclone_api-1.1.21 → rclone_api-1.1.23}/tox.ini +0 -0
  84. {rclone_api-1.1.21 → rclone_api-1.1.23}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.21
3
+ Version: 1.1.23
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -11,6 +11,7 @@ Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
12
  Requires-Dist: pyright>=1.1.393
13
13
  Requires-Dist: python-dotenv>=1.0.0
14
+ Requires-Dist: certifi>=2025.1.31
14
15
  Requires-Dist: boto3<=1.35.99,>=1.20.1
15
16
  Dynamic: home-page
16
17
 
@@ -13,6 +13,7 @@ classifiers = ["Programming Language :: Python :: 3"]
13
13
  dependencies = [
14
14
  "pyright>=1.1.393",
15
15
  "python-dotenv>=1.0.0",
16
+ "certifi>=2025.1.31",
16
17
 
17
18
  # BOTO3 Library needs to be pinned to a specific version
18
19
  # BackBlaze S3 fails with checksum header which it doesn't support after 1.35.99
@@ -21,7 +22,7 @@ dependencies = [
21
22
  ]
22
23
 
23
24
  # Change this with the version number bump.
24
- version = "1.1.21"
25
+ version = "1.1.23"
25
26
 
26
27
  [tool.setuptools]
27
28
  package-dir = {"" = "src"}
@@ -39,13 +39,13 @@ def _parse_args() -> Args:
39
39
  "--chunk-size",
40
40
  help="Chunk size that will be read and uploaded in in SizeSuffix (i.e. 128M = 128 megabytes) form",
41
41
  type=str,
42
- default="512MB",
42
+ default="256MB",
43
43
  )
44
44
  parser.add_argument(
45
45
  "--threads",
46
46
  help="Number of threads to use per chunk",
47
47
  type=int,
48
- default=64,
48
+ default=32,
49
49
  )
50
50
  parser.add_argument(
51
51
  "--write-threads",
@@ -205,6 +205,8 @@ class UploadState:
205
205
  return num_chunks - count
206
206
 
207
207
  def add_finished(self, part: FinishedPiece | None) -> None:
208
+ if part is None:
209
+ return
208
210
  with self.lock:
209
211
  self.parts.append(part)
210
212
  self._save_no_lock()
@@ -1,5 +1,6 @@
1
1
  import _thread
2
2
  import os
3
+ import traceback
3
4
  import warnings
4
5
  from concurrent.futures import ThreadPoolExecutor
5
6
  from pathlib import Path
@@ -50,18 +51,24 @@ def upload_task(
50
51
 
51
52
  def handle_upload(
52
53
  upload_info: UploadInfo, file_chunk: FileChunk | None
53
- ) -> FinishedPiece | None:
54
+ ) -> FinishedPiece | Exception | None:
54
55
  if file_chunk is None:
55
56
  return None
56
57
  chunk, part_number = file_chunk.data, file_chunk.part_number
57
- part: FinishedPiece = upload_task(
58
- info=upload_info,
59
- chunk=chunk,
60
- part_number=part_number,
61
- retries=upload_info.retries,
62
- )
63
- file_chunk.close()
64
- return part
58
+ try:
59
+ part: FinishedPiece = upload_task(
60
+ info=upload_info,
61
+ chunk=chunk,
62
+ part_number=part_number,
63
+ retries=upload_info.retries,
64
+ )
65
+ file_chunk.close()
66
+ return part
67
+ except Exception as e:
68
+ stacktrace = traceback.format_exc()
69
+ msg = f"Error uploading part {part_number}: {e}\n{stacktrace}"
70
+ warnings.warn(msg)
71
+ return e
65
72
 
66
73
 
67
74
  def prepare_upload_file_multipart(
@@ -227,16 +234,15 @@ def upload_file_multipart(
227
234
  break
228
235
 
229
236
  def task(upload_info=upload_info, file_chunk=file_chunk):
230
- try:
231
- return handle_upload(upload_info, file_chunk)
232
- except Exception:
233
- _thread.interrupt_main()
234
- raise
237
+ return handle_upload(upload_info, file_chunk)
235
238
 
236
239
  fut = executor.submit(task)
237
240
 
238
241
  def done_cb(fut=fut):
239
242
  result = fut.result()
243
+ if isinstance(result, Exception):
244
+ warnings.warn(f"Error uploading part: {result}, skipping")
245
+ return
240
246
  # upload_state.finished_parts.put(result)
241
247
  upload_state.add_finished(result)
242
248
 
@@ -32,7 +32,7 @@ def _create_backblaze_s3_client(creds: S3Credentials, verbose: bool) -> BaseClie
32
32
  # Note that BackBlase has a boko3 bug where it doesn't support the new
33
33
  # checksum header, the following line was an attempt of fix it on the newest
34
34
  # version of boto3, but it didn't work.
35
- # s3={"payload_signing_enabled": False}, # Disable checksum header
35
+ s3={"payload_signing_enabled": False}, # Disable checksum header
36
36
  ),
37
37
  )
38
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.21
3
+ Version: 1.1.23
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -11,6 +11,7 @@ Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
12
  Requires-Dist: pyright>=1.1.393
13
13
  Requires-Dist: python-dotenv>=1.0.0
14
+ Requires-Dist: certifi>=2025.1.31
14
15
  Requires-Dist: boto3<=1.35.99,>=1.20.1
15
16
  Dynamic: home-page
16
17
 
@@ -1,3 +1,4 @@
1
1
  pyright>=1.1.393
2
2
  python-dotenv>=1.0.0
3
+ certifi>=2025.1.31
3
4
  boto3<=1.35.99,>=1.20.1
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