rclone-api 1.1.57__tar.gz → 1.1.59__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.57 → rclone_api-1.1.59}/PKG-INFO +1 -1
- {rclone_api-1.1.57 → rclone_api-1.1.59}/pyproject.toml +1 -1
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/profile/mount_copy_bytes.py +55 -25
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.aiderignore +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.gitignore +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.pylintrc +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.vscode/launch.json +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.vscode/settings.json +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/.vscode/tasks.json +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/LICENSE +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/MANIFEST.in +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/README.md +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/clean +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/install +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/lint +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/requirements.testing.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/setup.cfg +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/setup.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/config.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/experimental/flags_base.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/file.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/mount.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/process.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/chunk_file.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/chunk_types.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/s3/upload_file_multipart.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/types.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/util.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/test +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_copy.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_copy_bytes.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_copy_file_resumable_s3.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_copy_files.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_diff.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_group_files.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_is_synced.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_ls.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_mount.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_obscure.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_remote_control.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_remotes.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_s3.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_size_files.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_size_suffix.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tests/test_walk.py +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/tox.ini +0 -0
- {rclone_api-1.1.57 → rclone_api-1.1.59}/upload_package.sh +0 -0
|
@@ -6,7 +6,7 @@ import argparse
|
|
|
6
6
|
import os
|
|
7
7
|
import shutil
|
|
8
8
|
import time
|
|
9
|
-
from concurrent.futures import
|
|
9
|
+
from concurrent.futures import Future, ThreadPoolExecutor
|
|
10
10
|
from dataclasses import dataclass
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
|
|
@@ -21,6 +21,8 @@ os.environ["RCLONE_API_VERBOSE"] = "1"
|
|
|
21
21
|
@dataclass
|
|
22
22
|
class Args:
|
|
23
23
|
direct_io: bool
|
|
24
|
+
num: int
|
|
25
|
+
size: SizeSuffix | None
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
@dataclass
|
|
@@ -155,19 +157,29 @@ def _run_profile(
|
|
|
155
157
|
print(f"Time: {diff:.1f} seconds")
|
|
156
158
|
|
|
157
159
|
|
|
158
|
-
def test_profile_copy_bytes(
|
|
160
|
+
def test_profile_copy_bytes(
|
|
161
|
+
args: Args,
|
|
162
|
+
rclone: Rclone,
|
|
163
|
+
offset: SizeSuffix,
|
|
164
|
+
transfer_list: list[int] | None,
|
|
165
|
+
mount_root_path: Path,
|
|
166
|
+
size: SizeSuffix | None,
|
|
167
|
+
) -> None:
|
|
159
168
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
if size:
|
|
170
|
+
sizes = [size.as_int()]
|
|
171
|
+
else:
|
|
172
|
+
sizes = [
|
|
173
|
+
# 1024 * 1024 * 1,
|
|
174
|
+
# 1024 * 1024 * 2,
|
|
175
|
+
# 1024 * 1024 * 4,
|
|
176
|
+
# 1024 * 1024 * 8,
|
|
177
|
+
1024 * 1024 * 16,
|
|
178
|
+
# 1024 * 1024 * 32,
|
|
179
|
+
1024 * 1024 * 64,
|
|
180
|
+
1024 * 1024 * 128,
|
|
181
|
+
# 1024 * 1024 * 256,
|
|
182
|
+
]
|
|
171
183
|
# transfer_list = [1, 2, 4, 8, 16]
|
|
172
184
|
transfer_list = transfer_list or [1, 2, 4]
|
|
173
185
|
|
|
@@ -175,16 +187,14 @@ def test_profile_copy_bytes(args: Args, rclone: Rclone, offset: SizeSuffix, tran
|
|
|
175
187
|
# sftp mount
|
|
176
188
|
src_file = "src:aa_misc_data/aa_misc_data/world_lending_library_2024_11.tar.zst"
|
|
177
189
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
for size in sizes:
|
|
190
|
+
for sz in sizes:
|
|
181
191
|
for transfers in transfer_list:
|
|
182
192
|
_run_profile(
|
|
183
193
|
rclone=rclone,
|
|
184
194
|
src_file=src_file,
|
|
185
195
|
transfers=transfers,
|
|
186
196
|
offset=offset,
|
|
187
|
-
size=SizeSuffix(
|
|
197
|
+
size=SizeSuffix(sz),
|
|
188
198
|
direct_io=args.direct_io,
|
|
189
199
|
log_dir=mount_root_path,
|
|
190
200
|
)
|
|
@@ -194,8 +204,12 @@ def test_profile_copy_bytes(args: Args, rclone: Rclone, offset: SizeSuffix, tran
|
|
|
194
204
|
def _parse_args() -> Args:
|
|
195
205
|
parser = argparse.ArgumentParser(description="Profile copy_bytes")
|
|
196
206
|
parser.add_argument("--direct-io", help="Use direct IO", action="store_true")
|
|
207
|
+
parser.add_argument("-n", "--num", help="Number of workers", type=int, default=1)
|
|
208
|
+
parser.add_argument(
|
|
209
|
+
"--size", help="Size of the file to download", type=SizeSuffix, default=None
|
|
210
|
+
)
|
|
197
211
|
args = parser.parse_args()
|
|
198
|
-
return Args(direct_io=args.direct_io)
|
|
212
|
+
return Args(direct_io=args.direct_io, num=args.num, size=args.size)
|
|
199
213
|
|
|
200
214
|
|
|
201
215
|
def main() -> None:
|
|
@@ -214,13 +228,25 @@ def main() -> None:
|
|
|
214
228
|
|
|
215
229
|
args = _parse_args()
|
|
216
230
|
transfer_list = [1]
|
|
217
|
-
parallel_workers =
|
|
218
|
-
|
|
219
|
-
def task(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
231
|
+
parallel_workers = args.num
|
|
232
|
+
|
|
233
|
+
def task(
|
|
234
|
+
offset: SizeSuffix,
|
|
235
|
+
args=args,
|
|
236
|
+
rclone=rclone,
|
|
237
|
+
transfer_list=transfer_list,
|
|
238
|
+
mount_root_path=mount_root_path,
|
|
239
|
+
):
|
|
240
|
+
return test_profile_copy_bytes(
|
|
241
|
+
args=args,
|
|
242
|
+
rclone=rclone,
|
|
243
|
+
offset=offset,
|
|
244
|
+
mount_root_path=mount_root_path,
|
|
245
|
+
transfer_list=transfer_list,
|
|
246
|
+
size=args.size,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
with ThreadPoolExecutor(max_workers=parallel_workers) as _:
|
|
224
250
|
tasks: list[Future] = []
|
|
225
251
|
for i in range(parallel_workers):
|
|
226
252
|
offset = SizeSuffix(i * 1024 * 1024 * 256)
|
|
@@ -229,4 +255,8 @@ def main() -> None:
|
|
|
229
255
|
|
|
230
256
|
|
|
231
257
|
if __name__ == "__main__":
|
|
258
|
+
import sys
|
|
259
|
+
|
|
260
|
+
sys.argv.append("--size")
|
|
261
|
+
sys.argv.append("16MB")
|
|
232
262
|
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|