rclone-api 1.4.5__tar.gz → 1.4.7__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 (105) hide show
  1. {rclone_api-1.4.5 → rclone_api-1.4.7}/PKG-INFO +1 -1
  2. {rclone_api-1.4.5 → rclone_api-1.4.7}/pyproject.toml +1 -1
  3. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/detail/copy_file_parts.py +41 -4
  4. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api.egg-info/PKG-INFO +1 -1
  5. {rclone_api-1.4.5 → rclone_api-1.4.7}/.aiderignore +0 -0
  6. {rclone_api-1.4.5 → rclone_api-1.4.7}/.github/workflows/lint.yml +0 -0
  7. {rclone_api-1.4.5 → rclone_api-1.4.7}/.github/workflows/push_macos.yml +0 -0
  8. {rclone_api-1.4.5 → rclone_api-1.4.7}/.github/workflows/push_ubuntu.yml +0 -0
  9. {rclone_api-1.4.5 → rclone_api-1.4.7}/.github/workflows/push_win.yml +0 -0
  10. {rclone_api-1.4.5 → rclone_api-1.4.7}/.gitignore +0 -0
  11. {rclone_api-1.4.5 → rclone_api-1.4.7}/.pylintrc +0 -0
  12. {rclone_api-1.4.5 → rclone_api-1.4.7}/.vscode/launch.json +0 -0
  13. {rclone_api-1.4.5 → rclone_api-1.4.7}/.vscode/settings.json +0 -0
  14. {rclone_api-1.4.5 → rclone_api-1.4.7}/.vscode/tasks.json +0 -0
  15. {rclone_api-1.4.5 → rclone_api-1.4.7}/LICENSE +0 -0
  16. {rclone_api-1.4.5 → rclone_api-1.4.7}/MANIFEST.in +0 -0
  17. {rclone_api-1.4.5 → rclone_api-1.4.7}/README.md +0 -0
  18. {rclone_api-1.4.5 → rclone_api-1.4.7}/clean +0 -0
  19. {rclone_api-1.4.5 → rclone_api-1.4.7}/install +0 -0
  20. {rclone_api-1.4.5 → rclone_api-1.4.7}/lint +0 -0
  21. {rclone_api-1.4.5 → rclone_api-1.4.7}/requirements.testing.txt +0 -0
  22. {rclone_api-1.4.5 → rclone_api-1.4.7}/setup.cfg +0 -0
  23. {rclone_api-1.4.5 → rclone_api-1.4.7}/setup.py +0 -0
  24. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/__init__.py +0 -0
  25. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/assets/example.txt +0 -0
  26. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/cli.py +0 -0
  27. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/cmd/analyze.py +0 -0
  28. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  29. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/cmd/list_files.py +0 -0
  30. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/cmd/save_to_db.py +0 -0
  31. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/completed_process.py +0 -0
  32. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/config.py +0 -0
  33. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/convert.py +0 -0
  34. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/db/__init__.py +0 -0
  35. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/db/db.py +0 -0
  36. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/db/models.py +0 -0
  37. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/deprecated.py +0 -0
  38. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/detail/walk.py +0 -0
  39. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/diff.py +0 -0
  40. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/dir.py +0 -0
  41. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/dir_listing.py +0 -0
  42. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/exec.py +0 -0
  43. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/experimental/flags.py +0 -0
  44. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/experimental/flags_base.py +0 -0
  45. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/file.py +0 -0
  46. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/file_item.py +0 -0
  47. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/file_part.py +0 -0
  48. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/file_stream.py +0 -0
  49. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/filelist.py +0 -0
  50. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/group_files.py +0 -0
  51. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/http_server.py +0 -0
  52. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/log.py +0 -0
  53. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/mount.py +0 -0
  54. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/process.py +0 -0
  55. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/rclone_impl.py +0 -0
  56. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/remote.py +0 -0
  57. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/rpath.py +0 -0
  58. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/api.py +0 -0
  59. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/basic_ops.py +0 -0
  60. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/chunk_task.py +0 -0
  61. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/create.py +0 -0
  62. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/file_info.py +0 -0
  63. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/finished_piece.py +0 -0
  64. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/upload_info.py +0 -0
  65. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/upload_state.py +0 -0
  66. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/s3_multipart_uploader.py +0 -0
  67. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/types.py +0 -0
  68. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/s3/upload_file_multipart.py +0 -0
  69. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/scan_missing_folders.py +0 -0
  70. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/types.py +0 -0
  71. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api/util.py +0 -0
  72. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  73. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  74. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api.egg-info/entry_points.txt +0 -0
  75. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api.egg-info/requires.txt +0 -0
  76. {rclone_api-1.4.5 → rclone_api-1.4.7}/src/rclone_api.egg-info/top_level.txt +0 -0
  77. {rclone_api-1.4.5 → rclone_api-1.4.7}/test +0 -0
  78. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/archive/test_paramiko.py.disabled +0 -0
  79. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_cmd_list_files.py +0 -0
  80. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_copy.py +0 -0
  81. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_copy_bytes.py +0 -0
  82. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_copy_file_resumable_s3.py +0 -0
  83. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_copy_files.py +0 -0
  84. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_db.py +0 -0
  85. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_diff.py +0 -0
  86. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_file_item.py +0 -0
  87. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_group_files.py +0 -0
  88. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_is_synced.py +0 -0
  89. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_ls.py +0 -0
  90. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_ls_stream_files.py +0 -0
  91. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_mount.py +0 -0
  92. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_mount_s3.py +0 -0
  93. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_obscure.py +0 -0
  94. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_rclone_config.py +0 -0
  95. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_read_write_text.py +0 -0
  96. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_remote_control.py +0 -0
  97. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_remotes.py +0 -0
  98. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_s3.py +0 -0
  99. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_scan_missing_folders.py +0 -0
  100. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_serve_http.py +0 -0
  101. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_size_files.py +0 -0
  102. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_size_suffix.py +0 -0
  103. {rclone_api-1.4.5 → rclone_api-1.4.7}/tests/test_walk.py +0 -0
  104. {rclone_api-1.4.5 → rclone_api-1.4.7}/tox.ini +0 -0
  105. {rclone_api-1.4.5 → rclone_api-1.4.7}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.4.5
3
+ Version: 1.4.7
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -25,7 +25,7 @@ dependencies = [
25
25
  ]
26
26
 
27
27
  # Change this with the version number bump.
28
- version = "1.4.5"
28
+ version = "1.4.7"
29
29
 
30
30
  [tool.setuptools]
31
31
  package-dir = {"" = "src"}
@@ -248,6 +248,36 @@ class InfoJson:
248
248
  return self.to_json_str()
249
249
 
250
250
 
251
+ def collapse_runs(numbers: list[int]) -> list[str]:
252
+ if not numbers:
253
+ return []
254
+
255
+ runs = []
256
+ start = numbers[0]
257
+ prev = numbers[0]
258
+
259
+ for num in numbers[1:]:
260
+ if num == prev + 1:
261
+ # Continue current run
262
+ prev = num
263
+ else:
264
+ # End current run
265
+ if start == prev:
266
+ runs.append(str(start))
267
+ else:
268
+ runs.append(f"{start}-{prev}")
269
+ start = num
270
+ prev = num
271
+
272
+ # Append the final run
273
+ if start == prev:
274
+ runs.append(str(start))
275
+ else:
276
+ runs.append(f"{start}-{prev}")
277
+
278
+ return runs
279
+
280
+
251
281
  def copy_file_parts(
252
282
  self: RcloneImpl,
253
283
  src: str, # src:/Bucket/path/myfile.large.zst
@@ -293,7 +323,13 @@ def copy_file_parts(
293
323
  all_numbers_already_done: set[int] = set(
294
324
  info_json.fetch_all_finished_part_numbers()
295
325
  )
296
- print(f"all_numbers_already_done: {sorted(list(all_numbers_already_done))}")
326
+
327
+ first_part_number = part_infos[0].part_number
328
+ last_part_number = part_infos[-1].part_number
329
+
330
+ print(
331
+ f"all_numbers_already_done: {collapse_runs(sorted(list(all_numbers_already_done)))}"
332
+ )
297
333
 
298
334
  filtered_part_infos: list[PartInfo] = []
299
335
  for part_info in part_infos:
@@ -302,15 +338,16 @@ def copy_file_parts(
302
338
  part_infos = filtered_part_infos
303
339
 
304
340
  remaining_part_numbers: list[int] = [p.part_number for p in part_infos]
305
- print(f"remaining_part_numbers: {remaining_part_numbers}")
341
+ print(f"remaining_part_numbers: {collapse_runs(remaining_part_numbers)}")
306
342
 
307
343
  if len(part_infos) == 0:
308
344
  return Exception(f"No parts to copy for {src}")
309
345
  chunk_size = SizeSuffix(part_infos[0].range.end - part_infos[0].range.start)
310
346
 
311
347
  info_json.chunksize = chunk_size
312
- info_json.first_part = part_infos[0].part_number
313
- info_json.last_part = part_infos[-1].part_number
348
+
349
+ info_json.first_part = first_part_number
350
+ info_json.last_part = last_part_number
314
351
  info_json.save()
315
352
 
316
353
  # We are now validated
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.4.5
3
+ Version: 1.4.7
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
File without changes
File without changes