rclone-api 1.0.82__tar.gz → 1.0.84__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.82 → rclone_api-1.0.84}/PKG-INFO +1 -1
- {rclone_api-1.0.82 → rclone_api-1.0.84}/pyproject.toml +1 -1
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/rclone.py +26 -3
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_copy_files.py +27 -1
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.aiderignore +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.gitignore +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.pylintrc +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.vscode/launch.json +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.vscode/settings.json +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/.vscode/tasks.json +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/LICENSE +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/MANIFEST.in +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/README.md +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/clean +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/install +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/lint +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/requirements.testing.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/setup.cfg +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/setup.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/config.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/file.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/process.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/types.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/util.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/test +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_copy.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_diff.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_group_files.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_is_synced.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_ls.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_mount.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_mount_webdav.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_obscure.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_remote_control.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_remotes.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_serve_webdav.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_size_files.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tests/test_walk.py +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/tox.ini +0 -0
- {rclone_api-1.0.82 → rclone_api-1.0.84}/upload_package.sh +0 -0
|
@@ -394,7 +394,12 @@ class Rclone:
|
|
|
394
394
|
f"Invalid file path, contains a remote, which is not allowed for copy_files: {p}"
|
|
395
395
|
)
|
|
396
396
|
|
|
397
|
-
|
|
397
|
+
if max_partition_workers > 1:
|
|
398
|
+
datalists: dict[str, list[str]] = group_files(
|
|
399
|
+
payload, fully_qualified=False
|
|
400
|
+
)
|
|
401
|
+
else:
|
|
402
|
+
datalists = {"": payload}
|
|
398
403
|
# out: subprocess.CompletedProcess | None = None
|
|
399
404
|
out: list[CompletedProcess] = []
|
|
400
405
|
|
|
@@ -490,7 +495,16 @@ class Rclone:
|
|
|
490
495
|
warnings.warn(f"Error deleting files: {cp.stderr}")
|
|
491
496
|
return out
|
|
492
497
|
|
|
493
|
-
def copy(
|
|
498
|
+
def copy(
|
|
499
|
+
self,
|
|
500
|
+
src: Dir | str,
|
|
501
|
+
dst: Dir | str,
|
|
502
|
+
check: bool | None = None,
|
|
503
|
+
transfers: int | None = None,
|
|
504
|
+
checkers: int | None = None,
|
|
505
|
+
multi_thread_streams: int | None = None,
|
|
506
|
+
other_args: list[str] | None = None,
|
|
507
|
+
) -> CompletedProcess:
|
|
494
508
|
"""Copy files from source to destination.
|
|
495
509
|
|
|
496
510
|
Args:
|
|
@@ -501,8 +515,17 @@ class Rclone:
|
|
|
501
515
|
# dst_dir = dst.path.path
|
|
502
516
|
src_dir = convert_to_str(src)
|
|
503
517
|
dst_dir = convert_to_str(dst)
|
|
518
|
+
check = get_check(check)
|
|
519
|
+
checkers = checkers or 1000
|
|
520
|
+
transfers = transfers or 32
|
|
504
521
|
cmd_list: list[str] = ["copy", src_dir, dst_dir]
|
|
505
|
-
|
|
522
|
+
cmd_list += ["--checkers", str(checkers)]
|
|
523
|
+
cmd_list += ["--transfers", str(transfers)]
|
|
524
|
+
if multi_thread_streams is not None:
|
|
525
|
+
cmd_list += ["--multi-thread-streams", str(multi_thread_streams)]
|
|
526
|
+
if other_args:
|
|
527
|
+
cmd_list += other_args
|
|
528
|
+
cp = self._run(cmd_list, check=check, capture=False)
|
|
506
529
|
return CompletedProcess.from_subprocess(cp)
|
|
507
530
|
|
|
508
531
|
def purge(self, path: Dir | str) -> CompletedProcess:
|
|
@@ -75,7 +75,33 @@ class RcloneCopyFilesTest(unittest.TestCase):
|
|
|
75
75
|
print(f"first_file: {first_file_str}")
|
|
76
76
|
include_files: list[str] = [first_file.name]
|
|
77
77
|
completed_procs: list[CompletedProcess] = rclone.copy_files(
|
|
78
|
-
src=src_prefix, dst=dst_prefix, files=include_files
|
|
78
|
+
src=src_prefix, dst=dst_prefix, files=include_files, max_partition_workers=2
|
|
79
|
+
)
|
|
80
|
+
self.assertGreater(len(completed_procs), 0)
|
|
81
|
+
for proc in completed_procs:
|
|
82
|
+
print(proc.stdout)
|
|
83
|
+
print(proc.stderr)
|
|
84
|
+
self.assertTrue(proc.returncode == 0)
|
|
85
|
+
self.assertTrue(rclone.exists(dst_prefix))
|
|
86
|
+
rclone.purge(dst_prefix)
|
|
87
|
+
print(f"Checking that {dst_prefix} was deleted")
|
|
88
|
+
still_exists = rclone.exists(dst_prefix)
|
|
89
|
+
self.assertFalse(still_exists)
|
|
90
|
+
print("done")
|
|
91
|
+
|
|
92
|
+
def test_copylist_one_worker(self) -> None:
|
|
93
|
+
"""Test copying a list of files to remote storage."""
|
|
94
|
+
rclone = Rclone(_generate_rclone_config())
|
|
95
|
+
dst_prefix = f"dst:{BUCKET_NAME}/test_out"
|
|
96
|
+
src_prefix = f"dst:{BUCKET_NAME}/zachs_video"
|
|
97
|
+
listing: DirListing = rclone.ls(src_prefix, glob="*.png")
|
|
98
|
+
self.assertGreater(len(listing.files), 0)
|
|
99
|
+
first_file: File = listing.files[0]
|
|
100
|
+
first_file_str = first_file.to_string(include_remote=False)
|
|
101
|
+
print(f"first_file: {first_file_str}")
|
|
102
|
+
include_files: list[str] = [first_file.name]
|
|
103
|
+
completed_procs: list[CompletedProcess] = rclone.copy_files(
|
|
104
|
+
src=src_prefix, dst=dst_prefix, files=include_files, max_partition_workers=1
|
|
79
105
|
)
|
|
80
106
|
self.assertGreater(len(completed_procs), 0)
|
|
81
107
|
for proc in completed_procs:
|
|
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
|