rclone-api 1.1.21__tar.gz → 1.1.22__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.1.21 → rclone_api-1.1.22}/PKG-INFO +2 -1
- {rclone_api-1.1.21 → rclone_api-1.1.22}/pyproject.toml +2 -1
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/chunk_types.py +2 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/chunk_uploader.py +20 -14
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api.egg-info/PKG-INFO +2 -1
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api.egg-info/requires.txt +1 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.aiderignore +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.gitignore +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.pylintrc +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.vscode/launch.json +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.vscode/settings.json +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/.vscode/tasks.json +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/LICENSE +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/MANIFEST.in +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/README.md +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/clean +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/install +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/lint +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/requirements.testing.txt +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/setup.cfg +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/setup.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/config.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/experimental/flags_base.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/file.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/mount.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/process.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/chunk_file.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/types.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/util.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/test +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_copy.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_copy_files.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_diff.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_group_files.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_is_synced.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_ls.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_mount.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_mounted_ranged_download.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_obscure.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_remote_control.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_remotes.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_s3.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_size_files.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_size_suffix.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tests/test_walk.py +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/tox.ini +0 -0
- {rclone_api-1.1.21 → rclone_api-1.1.22}/upload_package.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: rclone_api
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.22
|
|
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.
|
|
25
|
+
version = "1.1.22"
|
|
25
26
|
|
|
26
27
|
[tool.setuptools]
|
|
27
28
|
package-dir = {"" = "src"}
|
|
@@ -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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: rclone_api
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.22
|
|
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
|
|
|
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
|