rclone-api 1.0.100__tar.gz → 1.1.1__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.0.100 → rclone_api-1.1.1}/PKG-INFO +1 -1
- {rclone_api-1.0.100 → rclone_api-1.1.1}/pyproject.toml +1 -1
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/s3/chunk_uploader.py +23 -15
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.aiderignore +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.gitignore +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.pylintrc +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.vscode/launch.json +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.vscode/settings.json +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/.vscode/tasks.json +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/LICENSE +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/MANIFEST.in +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/README.md +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/clean +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/install +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/lint +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/requirements.testing.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/setup.cfg +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/setup.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/config.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/file.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/process.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/types.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/util.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/test +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_copy.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_copy_files.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_diff.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_group_files.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_is_synced.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_ls.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_mount.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_mount_webdav.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_mounted_ranged_download.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_obscure.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_remote_control.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_remotes.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_s3.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_size_files.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tests/test_walk.py +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/tox.ini +0 -0
- {rclone_api-1.0.100 → rclone_api-1.1.1}/upload_package.sh +0 -0
|
@@ -295,22 +295,23 @@ def file_chunker(
|
|
|
295
295
|
chunk_size = upload_info.chunk_size
|
|
296
296
|
src = Path(file_path)
|
|
297
297
|
# Mounted files may take a while to appear, so keep retrying.
|
|
298
|
-
file_size = _get_file_size(src, timeout=60)
|
|
299
|
-
part_number = 1
|
|
300
|
-
done_part_numbers: set[int] = {
|
|
301
|
-
p.part_number for p in upload_state.parts if p is not None
|
|
302
|
-
}
|
|
303
|
-
num_parts = upload_info.total_chunks()
|
|
304
|
-
|
|
305
|
-
def next_part_number() -> int | None:
|
|
306
|
-
nonlocal part_number
|
|
307
|
-
while part_number in done_part_numbers:
|
|
308
|
-
part_number += 1
|
|
309
|
-
if part_number > num_parts:
|
|
310
|
-
return None
|
|
311
|
-
return part_number
|
|
312
298
|
|
|
313
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
|
+
|
|
314
315
|
while not should_stop():
|
|
315
316
|
curr_parth_num = next_part_number()
|
|
316
317
|
if curr_parth_num is None:
|
|
@@ -491,16 +492,20 @@ def upload_file_multipart(
|
|
|
491
492
|
upload_info = upload_state.upload_info
|
|
492
493
|
max_workers = 8
|
|
493
494
|
|
|
495
|
+
chunker_errors: Queue[Exception] = Queue()
|
|
496
|
+
|
|
494
497
|
def chunker_task(
|
|
495
498
|
upload_state=upload_state,
|
|
496
499
|
output=filechunks,
|
|
497
500
|
max_chunks=max_chunks_before_suspension,
|
|
501
|
+
queue_errors=chunker_errors,
|
|
498
502
|
) -> None:
|
|
499
503
|
try:
|
|
500
504
|
file_chunker(
|
|
501
505
|
upload_state=upload_state, output=output, max_chunks=max_chunks
|
|
502
506
|
)
|
|
503
|
-
except Exception:
|
|
507
|
+
except Exception as e:
|
|
508
|
+
queue_errors.put(e)
|
|
504
509
|
_thread.interrupt_main()
|
|
505
510
|
raise
|
|
506
511
|
|
|
@@ -532,6 +537,9 @@ def upload_file_multipart(
|
|
|
532
537
|
# upload_state.finished_parts.put(None) # Signal the end of the queue
|
|
533
538
|
upload_state.add_finished(None)
|
|
534
539
|
thread_chunker.join()
|
|
540
|
+
|
|
541
|
+
if not chunker_errors.empty():
|
|
542
|
+
raise chunker_errors.get()
|
|
535
543
|
if not upload_state.is_done():
|
|
536
544
|
upload_state.save()
|
|
537
545
|
return MultiUploadResult.SUSPENDED
|
|
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
|