rclone-api 1.4.6__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.
- {rclone_api-1.4.6 → rclone_api-1.4.7}/PKG-INFO +1 -1
- {rclone_api-1.4.6 → rclone_api-1.4.7}/pyproject.toml +1 -1
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/detail/copy_file_parts.py +34 -2
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.aiderignore +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.gitignore +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.pylintrc +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.vscode/launch.json +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.vscode/settings.json +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/.vscode/tasks.json +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/LICENSE +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/MANIFEST.in +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/README.md +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/clean +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/install +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/lint +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/requirements.testing.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/setup.cfg +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/setup.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/cmd/analyze.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/cmd/save_to_db.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/config.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/db/__init__.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/db/db.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/db/models.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/detail/walk.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/experimental/flags_base.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/file.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/file_item.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/file_part.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/file_stream.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/http_server.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/log.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/mount.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/process.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/rclone_impl.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/chunk_task.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/file_info.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/finished_piece.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/upload_info.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/multipart/upload_state.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/s3_multipart_uploader.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/s3/upload_file_multipart.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/types.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api/util.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/test +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_copy.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_copy_bytes.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_copy_file_resumable_s3.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_copy_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_db.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_diff.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_file_item.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_group_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_is_synced.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_ls.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_ls_stream_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_mount.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_obscure.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_read_write_text.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_remote_control.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_remotes.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_s3.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_serve_http.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_size_files.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_size_suffix.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tests/test_walk.py +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/tox.ini +0 -0
- {rclone_api-1.4.6 → rclone_api-1.4.7}/upload_package.sh +0 -0
@@ -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
|
@@ -297,7 +327,9 @@ def copy_file_parts(
|
|
297
327
|
first_part_number = part_infos[0].part_number
|
298
328
|
last_part_number = part_infos[-1].part_number
|
299
329
|
|
300
|
-
print(
|
330
|
+
print(
|
331
|
+
f"all_numbers_already_done: {collapse_runs(sorted(list(all_numbers_already_done)))}"
|
332
|
+
)
|
301
333
|
|
302
334
|
filtered_part_infos: list[PartInfo] = []
|
303
335
|
for part_info in part_infos:
|
@@ -306,7 +338,7 @@ def copy_file_parts(
|
|
306
338
|
part_infos = filtered_part_infos
|
307
339
|
|
308
340
|
remaining_part_numbers: list[int] = [p.part_number for p in part_infos]
|
309
|
-
print(f"remaining_part_numbers: {remaining_part_numbers}")
|
341
|
+
print(f"remaining_part_numbers: {collapse_runs(remaining_part_numbers)}")
|
310
342
|
|
311
343
|
if len(part_infos) == 0:
|
312
344
|
return Exception(f"No parts to copy for {src}")
|
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
|
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
|
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
|