rclone-api 1.1.58__py2.py3-none-any.whl → 1.1.60__py2.py3-none-any.whl

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.
@@ -6,7 +6,7 @@ import argparse
6
6
  import os
7
7
  import shutil
8
8
  import time
9
- from concurrent.futures import ThreadPoolExecutor, Future
9
+ from concurrent.futures import Future, ThreadPoolExecutor
10
10
  from dataclasses import dataclass
11
11
  from pathlib import Path
12
12
 
@@ -21,7 +21,8 @@ os.environ["RCLONE_API_VERBOSE"] = "1"
21
21
  @dataclass
22
22
  class Args:
23
23
  direct_io: bool
24
- num: int = 1
24
+ num: int
25
+ size: SizeSuffix | None
25
26
 
26
27
 
27
28
  @dataclass
@@ -107,7 +108,8 @@ def _run_profile(
107
108
  offset: SizeSuffix,
108
109
  size: SizeSuffix,
109
110
  log_dir: Path,
110
- direct_io: bool = True,
111
+ num: int,
112
+ direct_io: bool,
111
113
  ) -> None:
112
114
 
113
115
  mount_log = log_dir / f"mount_{SizeSuffix(size)}_threads_{transfers}.log"
@@ -136,9 +138,9 @@ def _run_profile(
136
138
  assert len(bytes_or_err) == size.as_int(), f"Length: {len(bytes_or_err)} != {size}"
137
139
 
138
140
  # print io stats
139
- bytes_sent = net_io_end.bytes_sent - net_io_start.bytes_sent
140
- bytes_recv = net_io_end.bytes_recv - net_io_start.bytes_recv
141
- packets_sent = net_io_end.packets_sent - net_io_start.packets_sent
141
+ bytes_sent = (net_io_end.bytes_sent - net_io_start.bytes_sent) // num
142
+ bytes_recv = (net_io_end.bytes_recv - net_io_start.bytes_recv) // num
143
+ packets_sent = (net_io_end.packets_sent - net_io_start.packets_sent) // num
142
144
  efficiency = size.as_int() / (bytes_recv)
143
145
  efficiency_100 = efficiency * 100
144
146
  efficiency_str = f"{efficiency_100:.2f}"
@@ -156,19 +158,30 @@ def _run_profile(
156
158
  print(f"Time: {diff:.1f} seconds")
157
159
 
158
160
 
159
- def test_profile_copy_bytes(args: Args, rclone: Rclone, offset: SizeSuffix, transfer_list: list[int] | None, mount_root_path: Path) -> None:
161
+ def test_profile_copy_bytes(
162
+ args: Args,
163
+ rclone: Rclone,
164
+ offset: SizeSuffix,
165
+ transfer_list: list[int] | None,
166
+ mount_root_path: Path,
167
+ size: SizeSuffix | None,
168
+ num: int,
169
+ ) -> None:
160
170
 
161
- sizes = [
162
- #1024 * 1024 * 1,
163
- #1024 * 1024 * 2,
164
- #1024 * 1024 * 4,
165
- #1024 * 1024 * 8,
166
- 1024 * 1024 * 16,
167
- # 1024 * 1024 * 32,
168
- 1024 * 1024 * 64,
169
- 1024 * 1024 * 128,
170
- # 1024 * 1024 * 256,
171
- ]
171
+ if size:
172
+ sizes = [size.as_int()]
173
+ else:
174
+ sizes = [
175
+ # 1024 * 1024 * 1,
176
+ # 1024 * 1024 * 2,
177
+ # 1024 * 1024 * 4,
178
+ # 1024 * 1024 * 8,
179
+ 1024 * 1024 * 16,
180
+ # 1024 * 1024 * 32,
181
+ 1024 * 1024 * 64,
182
+ 1024 * 1024 * 128,
183
+ # 1024 * 1024 * 256,
184
+ ]
172
185
  # transfer_list = [1, 2, 4, 8, 16]
173
186
  transfer_list = transfer_list or [1, 2, 4]
174
187
 
@@ -176,18 +189,17 @@ def test_profile_copy_bytes(args: Args, rclone: Rclone, offset: SizeSuffix, tran
176
189
  # sftp mount
177
190
  src_file = "src:aa_misc_data/aa_misc_data/world_lending_library_2024_11.tar.zst"
178
191
 
179
-
180
-
181
- for size in sizes:
192
+ for sz in sizes:
182
193
  for transfers in transfer_list:
183
194
  _run_profile(
184
195
  rclone=rclone,
185
196
  src_file=src_file,
186
197
  transfers=transfers,
187
198
  offset=offset,
188
- size=SizeSuffix(size),
199
+ size=SizeSuffix(sz),
189
200
  direct_io=args.direct_io,
190
201
  log_dir=mount_root_path,
202
+ num=num,
191
203
  )
192
204
  print("done")
193
205
 
@@ -196,8 +208,11 @@ def _parse_args() -> Args:
196
208
  parser = argparse.ArgumentParser(description="Profile copy_bytes")
197
209
  parser.add_argument("--direct-io", help="Use direct IO", action="store_true")
198
210
  parser.add_argument("-n", "--num", help="Number of workers", type=int, default=1)
211
+ parser.add_argument(
212
+ "--size", help="Size of the file to download", type=SizeSuffix, default=None
213
+ )
199
214
  args = parser.parse_args()
200
- return Args(direct_io=args.direct_io, num=args.num)
215
+ return Args(direct_io=args.direct_io, num=args.num, size=args.size)
201
216
 
202
217
 
203
218
  def main() -> None:
@@ -218,11 +233,24 @@ def main() -> None:
218
233
  transfer_list = [1]
219
234
  parallel_workers = args.num
220
235
 
221
- def task(offset: SizeSuffix, args=args, rclone=rclone, transfer_list=transfer_list, mount_root_path=mount_root_path):
222
- return test_profile_copy_bytes(args, rclone, offset, transfer_list, mount_root_path)
223
-
224
-
225
- with ThreadPoolExecutor(max_workers=parallel_workers) as executor:
236
+ def task(
237
+ offset: SizeSuffix,
238
+ args=args,
239
+ rclone=rclone,
240
+ transfer_list=transfer_list,
241
+ mount_root_path=mount_root_path,
242
+ ):
243
+ return test_profile_copy_bytes(
244
+ args=args,
245
+ rclone=rclone,
246
+ offset=offset,
247
+ mount_root_path=mount_root_path,
248
+ transfer_list=transfer_list,
249
+ size=args.size,
250
+ num=args.num,
251
+ )
252
+
253
+ with ThreadPoolExecutor(max_workers=parallel_workers) as _:
226
254
  tasks: list[Future] = []
227
255
  for i in range(parallel_workers):
228
256
  offset = SizeSuffix(i * 1024 * 1024 * 256)
@@ -231,4 +259,8 @@ def main() -> None:
231
259
 
232
260
 
233
261
  if __name__ == "__main__":
262
+ import sys
263
+
264
+ sys.argv.append("--size")
265
+ sys.argv.append("16MB")
234
266
  main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.58
3
+ Version: 1.1.60
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -25,7 +25,7 @@ rclone_api/cmd/copy_large_s3.py,sha256=-rfedi-ZzPUdCSP8ai9LRL0y1xVkvN-viQQlk8HVU
25
25
  rclone_api/cmd/list_files.py,sha256=x8FHODEilwKqwdiU1jdkeJbLwOqUkUQuDWPo2u_zpf0,741
26
26
  rclone_api/experimental/flags.py,sha256=qCVD--fSTmzlk9hloRLr0q9elzAOFzPsvVpKM3aB1Mk,2739
27
27
  rclone_api/experimental/flags_base.py,sha256=ajU_czkTcAxXYU-SlmiCfHY7aCQGHvpCLqJ-Z8uZLk0,2102
28
- rclone_api/profile/mount_copy_bytes.py,sha256=SybEsKZ1fw-O6RbXTiV-cmo3fAjqwhOuFZdawr_X0HU,6960
28
+ rclone_api/profile/mount_copy_bytes.py,sha256=aHbIsIm2_fEvSZIHhRcXaNB2caT7xaE4zJi4dNYr7II,7621
29
29
  rclone_api/s3/api.py,sha256=qxtRDUpHYqJ7StJRtP8U_PbF_BvYRg705568SyvF-R0,3770
30
30
  rclone_api/s3/basic_ops.py,sha256=hK3366xhVEzEcjz9Gk_8lFx6MRceAk72cax6mUrr6ko,2104
31
31
  rclone_api/s3/chunk_file.py,sha256=D6wM9Nuu73LNGC8JCCfevqjF3qdZ21mQxYQClFLZLMU,3726
@@ -33,9 +33,9 @@ rclone_api/s3/chunk_types.py,sha256=LbXayXY1KgVU1LkdbASD_BQ7TpVpwVnzMjtz--8LBaE,
33
33
  rclone_api/s3/create.py,sha256=wgfkapv_j904CfKuWyiBIWJVxfAx_ftemFSUV14aT68,3149
34
34
  rclone_api/s3/types.py,sha256=yBnJ38Tjk6RlydJ-sqZ7DSfyFloy8KDYJ0mv3vlOzLE,1388
35
35
  rclone_api/s3/upload_file_multipart.py,sha256=y9azNAU8QH5Ovwz33V2HZwNmJdlFjJg-jrXLZ1gtMds,10364
36
- rclone_api-1.1.58.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
37
- rclone_api-1.1.58.dist-info/METADATA,sha256=y62azQy7mgVjksQozOOsWUtVw_wMeyef2-Y0NbnTEC0,4537
38
- rclone_api-1.1.58.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
39
- rclone_api-1.1.58.dist-info/entry_points.txt,sha256=TV8kwP3FRzYwUEr0RLC7aJh0W03SAefIJNXTJ-FdMIQ,200
40
- rclone_api-1.1.58.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
41
- rclone_api-1.1.58.dist-info/RECORD,,
36
+ rclone_api-1.1.60.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
37
+ rclone_api-1.1.60.dist-info/METADATA,sha256=fUIrdhlIVOhWdheud6rnjJ2ikFhd4Z9hBw5fLiEJR2s,4537
38
+ rclone_api-1.1.60.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
39
+ rclone_api-1.1.60.dist-info/entry_points.txt,sha256=TV8kwP3FRzYwUEr0RLC7aJh0W03SAefIJNXTJ-FdMIQ,200
40
+ rclone_api-1.1.60.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
41
+ rclone_api-1.1.60.dist-info/RECORD,,