rclone-api 1.1.53__tar.gz → 1.1.55__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.53 → rclone_api-1.1.55}/PKG-INFO +1 -1
- {rclone_api-1.1.53 → rclone_api-1.1.55}/pyproject.toml +1 -1
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/profile/mount_copy_bytes.py +29 -30
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.aiderignore +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.gitignore +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.pylintrc +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.vscode/launch.json +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.vscode/settings.json +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/.vscode/tasks.json +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/LICENSE +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/MANIFEST.in +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/README.md +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/clean +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/install +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/lint +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/requirements.testing.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/setup.cfg +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/setup.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/config.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/experimental/flags_base.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/file.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/mount.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/process.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/chunk_file.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/chunk_types.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/s3/upload_file_multipart.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/types.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/util.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/test +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_copy.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_copy_bytes.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_copy_file_resumable_s3.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_copy_files.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_diff.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_group_files.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_is_synced.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_ls.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_mount.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_obscure.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_remote_control.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_remotes.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_s3.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_size_files.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_size_suffix.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tests/test_walk.py +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/tox.ini +0 -0
- {rclone_api-1.1.53 → rclone_api-1.1.55}/upload_package.sh +0 -0
|
@@ -6,6 +6,7 @@ import argparse
|
|
|
6
6
|
import os
|
|
7
7
|
import shutil
|
|
8
8
|
import time
|
|
9
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
9
10
|
from dataclasses import dataclass
|
|
10
11
|
from pathlib import Path
|
|
11
12
|
|
|
@@ -14,6 +15,8 @@ from dotenv import load_dotenv
|
|
|
14
15
|
|
|
15
16
|
from rclone_api import Config, Rclone, SizeSuffix
|
|
16
17
|
|
|
18
|
+
os.environ["RCLONE_API_VERBOSE"] = "1"
|
|
19
|
+
|
|
17
20
|
|
|
18
21
|
@dataclass
|
|
19
22
|
class Args:
|
|
@@ -96,25 +99,12 @@ pass = {SRC_SFTP_PASS}
|
|
|
96
99
|
return Config(config_text), creds
|
|
97
100
|
|
|
98
101
|
|
|
99
|
-
def _init() -> None:
|
|
100
|
-
"""Check if all required environment variables are set before running tests."""
|
|
101
|
-
required_vars = [
|
|
102
|
-
"BUCKET_NAME",
|
|
103
|
-
"BUCKET_KEY_SECRET",
|
|
104
|
-
"BUCKET_KEY_PUBLIC",
|
|
105
|
-
"BUCKET_URL",
|
|
106
|
-
]
|
|
107
|
-
missing = [var for var in required_vars if not os.getenv(var)]
|
|
108
|
-
if missing:
|
|
109
|
-
print(f"Missing required environment variables: {', '.join(missing)}")
|
|
110
|
-
os.environ["RCLONE_API_VERBOSE"] = "1"
|
|
111
|
-
|
|
112
|
-
|
|
113
102
|
def _run_profile(
|
|
114
103
|
rclone: Rclone,
|
|
115
104
|
src_file: str,
|
|
116
105
|
transfers: int,
|
|
117
|
-
|
|
106
|
+
offset: SizeSuffix,
|
|
107
|
+
size: SizeSuffix,
|
|
118
108
|
log_dir: Path,
|
|
119
109
|
direct_io: bool = True,
|
|
120
110
|
) -> None:
|
|
@@ -128,8 +118,8 @@ def _run_profile(
|
|
|
128
118
|
start = time.time()
|
|
129
119
|
bytes_or_err: bytes | Exception = rclone.copy_bytes(
|
|
130
120
|
src=src_file,
|
|
131
|
-
offset=
|
|
132
|
-
length=size,
|
|
121
|
+
offset=offset.as_int(),
|
|
122
|
+
length=size.as_int(),
|
|
133
123
|
direct_io=direct_io,
|
|
134
124
|
transfers=transfers,
|
|
135
125
|
mount_log=mount_log,
|
|
@@ -142,13 +132,13 @@ def _run_profile(
|
|
|
142
132
|
assert False, f"Error: {bytes_or_err}\nStack trace:\n{stack_trace}"
|
|
143
133
|
assert isinstance(bytes_or_err, bytes)
|
|
144
134
|
# self.assertEqual(len(bytes_or_err), size)
|
|
145
|
-
assert len(bytes_or_err) == size, f"Length: {len(bytes_or_err)} != {size}"
|
|
135
|
+
assert len(bytes_or_err) == size.as_int(), f"Length: {len(bytes_or_err)} != {size}"
|
|
146
136
|
|
|
147
137
|
# print io stats
|
|
148
138
|
bytes_sent = net_io_end.bytes_sent - net_io_start.bytes_sent
|
|
149
139
|
bytes_recv = net_io_end.bytes_recv - net_io_start.bytes_recv
|
|
150
140
|
packets_sent = net_io_end.packets_sent - net_io_start.packets_sent
|
|
151
|
-
efficiency = size / (bytes_recv)
|
|
141
|
+
efficiency = size.as_int() / (bytes_recv)
|
|
152
142
|
efficiency_100 = efficiency * 100
|
|
153
143
|
efficiency_str = f"{efficiency_100:.2f}"
|
|
154
144
|
|
|
@@ -165,14 +155,7 @@ def _run_profile(
|
|
|
165
155
|
print(f"Time: {diff:.1f} seconds")
|
|
166
156
|
|
|
167
157
|
|
|
168
|
-
def test_profile_copy_bytes(args: Args) -> None:
|
|
169
|
-
print("Running test_profile_copy_bytes")
|
|
170
|
-
config, creds = _generate_rclone_config()
|
|
171
|
-
print("Config:")
|
|
172
|
-
print(config)
|
|
173
|
-
print("Credentials:")
|
|
174
|
-
print(creds)
|
|
175
|
-
rclone = Rclone(config)
|
|
158
|
+
def test_profile_copy_bytes(args: Args, rclone: Rclone, offset: SizeSuffix) -> None:
|
|
176
159
|
|
|
177
160
|
sizes = [
|
|
178
161
|
1024 * 1024 * 1,
|
|
@@ -202,7 +185,8 @@ def test_profile_copy_bytes(args: Args) -> None:
|
|
|
202
185
|
rclone=rclone,
|
|
203
186
|
src_file=src_file,
|
|
204
187
|
transfers=transfers,
|
|
205
|
-
|
|
188
|
+
offset=offset,
|
|
189
|
+
size=SizeSuffix(size),
|
|
206
190
|
direct_io=args.direct_io,
|
|
207
191
|
log_dir=mount_root_path,
|
|
208
192
|
)
|
|
@@ -218,9 +202,24 @@ def _parse_args() -> Args:
|
|
|
218
202
|
|
|
219
203
|
def main() -> None:
|
|
220
204
|
"""Main entry point."""
|
|
221
|
-
|
|
205
|
+
print("Running test_profile_copy_bytes")
|
|
206
|
+
config, creds = _generate_rclone_config()
|
|
207
|
+
print("Config:")
|
|
208
|
+
print(config)
|
|
209
|
+
print("Credentials:")
|
|
210
|
+
print(creds)
|
|
211
|
+
rclone = Rclone(config)
|
|
212
|
+
|
|
222
213
|
args = _parse_args()
|
|
223
|
-
|
|
214
|
+
|
|
215
|
+
with ThreadPoolExecutor() as executor:
|
|
216
|
+
|
|
217
|
+
def task(offset: SizeSuffix, args=args, rclone=rclone):
|
|
218
|
+
return test_profile_copy_bytes(args, rclone, offset)
|
|
219
|
+
|
|
220
|
+
executor.submit(task, SizeSuffix(0))
|
|
221
|
+
executor.submit(task, SizeSuffix("1G"))
|
|
222
|
+
executor.submit(task, SizeSuffix("2G"))
|
|
224
223
|
|
|
225
224
|
|
|
226
225
|
if __name__ == "__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
|