rclone-api 1.1.11__py2.py3-none-any.whl → 1.1.12__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.
@@ -14,6 +14,7 @@ class Args:
14
14
  dst: str
15
15
  chunk_size: SizeSuffix
16
16
  threads: int
17
+ write_threads: int
17
18
  retries: int
18
19
  save_state_json: Path
19
20
  verbose: bool
@@ -38,7 +39,7 @@ def _parse_args() -> Args:
38
39
  "--chunk-size",
39
40
  help="Chunk size that will be read and uploaded in in SizeSuffix (i.e. 128M = 128 megabytes) form",
40
41
  type=str,
41
- default="1G",
42
+ default="512MB",
42
43
  )
43
44
  parser.add_argument(
44
45
  "--threads",
@@ -46,6 +47,12 @@ def _parse_args() -> Args:
46
47
  type=int,
47
48
  default=64,
48
49
  )
50
+ parser.add_argument(
51
+ "--write-threads",
52
+ help="Max number of chunks to upload in parallel to the destination",
53
+ type=int,
54
+ default=64,
55
+ )
49
56
  parser.add_argument("--retries", help="Number of retries", type=int, default=3)
50
57
  parser.add_argument(
51
58
  "--resume-json",
@@ -61,6 +68,7 @@ def _parse_args() -> Args:
61
68
  dst=args.dst,
62
69
  chunk_size=SizeSuffix(args.chunk_size),
63
70
  threads=args.threads,
71
+ write_threads=args.write_threads,
64
72
  retries=args.retries,
65
73
  save_state_json=args.resume_json,
66
74
  verbose=args.verbose,
@@ -77,7 +85,8 @@ def main() -> int:
77
85
  src=args.src,
78
86
  dst=args.dst,
79
87
  chunk_size=args.chunk_size,
80
- threads=args.threads,
88
+ read_threads=args.threads,
89
+ write_threads=args.write_threads,
81
90
  # vfs_read_chunk_size=unit_chunk,
82
91
  # vfs_read_chunk_size_limit=args.chunk_size,
83
92
  # vfs_read_chunk_streams=args.threads,
rclone_api/rclone.py CHANGED
@@ -678,7 +678,8 @@ class Rclone:
678
678
  dst: str,
679
679
  save_state_json: Path,
680
680
  chunk_size: SizeSuffix | None = None,
681
- threads: int = 16,
681
+ read_threads: int = 16,
682
+ write_threads: int = 16,
682
683
  retries: int = 3,
683
684
  verbose: bool | None = None,
684
685
  max_chunks_before_suspension: int | None = None,
@@ -691,10 +692,10 @@ class Rclone:
691
692
 
692
693
  other_args: list[str] = ["--no-modtime", "--vfs-read-wait", "1s"]
693
694
  chunk_size = chunk_size or SizeSuffix("128M")
694
- unit_chunk_size = chunk_size / threads
695
+ unit_chunk_size = chunk_size / read_threads
695
696
  vfs_read_chunk_size = unit_chunk_size
696
697
  vfs_read_chunk_size_limit = chunk_size
697
- vfs_read_chunk_streams = threads
698
+ vfs_read_chunk_streams = read_threads
698
699
  vfs_disk_space_total_size = chunk_size
699
700
  assert (
700
701
  chunk_size.as_int() % vfs_read_chunk_size.as_int() == 0
@@ -773,6 +774,7 @@ class Rclone:
773
774
  client = S3Client(s3_creds)
774
775
  config: S3MutliPartUploadConfig = S3MutliPartUploadConfig(
775
776
  chunk_size=chunk_size.as_int(),
777
+ max_write_threads=write_threads,
776
778
  retries=retries,
777
779
  resume_path_json=save_state_json,
778
780
  max_chunks_before_suspension=max_chunks_before_suspension,
@@ -797,6 +799,7 @@ class Rclone:
797
799
  upload_config = S3MutliPartUploadConfig(
798
800
  chunk_size=chunk_size.as_int(),
799
801
  retries=retries,
802
+ max_write_threads=write_threads,
800
803
  resume_path_json=save_state_json,
801
804
  max_chunks_before_suspension=max_chunks_before_suspension,
802
805
  )
@@ -115,6 +115,7 @@ def upload_file_multipart(
115
115
  object_name: str,
116
116
  resumable_info_path: Path | None,
117
117
  chunk_size: int = 16 * 1024 * 1024, # Default chunk size is 16MB; can be overridden
118
+ upload_threads: int = 16,
118
119
  retries: int = 20,
119
120
  max_chunks_before_suspension: int | None = None,
120
121
  abort_transfer_on_failure: bool = False,
@@ -197,7 +198,6 @@ def upload_file_multipart(
197
198
  )
198
199
  started_new_upload = finished == 0
199
200
  upload_info = upload_state.upload_info
200
- max_workers = 8
201
201
 
202
202
  chunker_errors: Queue[Exception] = Queue()
203
203
 
@@ -220,7 +220,7 @@ def upload_file_multipart(
220
220
  thread_chunker = Thread(target=chunker_task, daemon=True)
221
221
  thread_chunker.start()
222
222
 
223
- with ThreadPoolExecutor(max_workers=max_workers) as executor:
223
+ with ThreadPoolExecutor(max_workers=upload_threads) as executor:
224
224
  while True:
225
225
  file_chunk: FileChunk | None = filechunks.get()
226
226
  if file_chunk is None:
rclone_api/s3/types.py CHANGED
@@ -46,6 +46,7 @@ class S3MutliPartUploadConfig:
46
46
  chunk_size: int
47
47
  retries: int
48
48
  resume_path_json: Path
49
+ max_write_threads: int
49
50
  max_chunks_before_suspension: int | None = None
50
51
  mount_path: Path | None = (
51
52
  None # If set this will be used to mount the src file, otherwise it's one is chosen automatically
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.11
3
+ Version: 1.1.12
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -13,7 +13,7 @@ rclone_api/filelist.py,sha256=xbiusvNgaB_b_kQOZoHMJJxn6TWGtPrWd2J042BI28o,767
13
13
  rclone_api/group_files.py,sha256=H92xPW9lQnbNw5KbtZCl00bD6iRh9yRbCuxku4j_3dg,8036
14
14
  rclone_api/mount.py,sha256=Xj3BMVSDEwUbtMi8ycn5mUom-fAf-F9lJOjR_BzVllw,6073
15
15
  rclone_api/process.py,sha256=xYUgU17txkZfZdr4vtRfvD8YjvSfdrbjM7PYW1npAMI,4264
16
- rclone_api/rclone.py,sha256=BA3DJvCraLIrglDGSi1mF-wCH8rsqpBzc-5O-IWQpq8,39809
16
+ rclone_api/rclone.py,sha256=MelTVgBhV-JQdDUMLYusEuNSOq-RyrZCcKkkkSpsRfA,39955
17
17
  rclone_api/remote.py,sha256=O9WDUFQy9f6oT1HdUbTixK2eg0xtBBm8k4Xl6aa6K00,431
18
18
  rclone_api/rpath.py,sha256=8ZA_1wxWtskwcy0I8V2VbjKDmzPkiWd8Q2JQSvh-sYE,2586
19
19
  rclone_api/scan_missing_folders.py,sha256=Kulca2Q6WZodt00ATFHkmqqInuoPvBkhTcS9703y6po,4740
@@ -21,7 +21,7 @@ rclone_api/types.py,sha256=zfTb0iM6mhfqgaYS6j6T0NIOA4e9GymNOXLPhVELe4A,3853
21
21
  rclone_api/util.py,sha256=_Z-GUMVXnHYOGdo2dy2ie2P5fGgyg8KdGjHKicx68Ko,4573
22
22
  rclone_api/walk.py,sha256=-54NVE8EJcCstwDoaC_UtHm73R2HrZwVwQmsnv55xNU,3369
23
23
  rclone_api/assets/example.txt,sha256=lTBovRjiz0_TgtAtbA1C5hNi2ffbqnNPqkKg6UiKCT8,54
24
- rclone_api/cmd/copy_large_s3.py,sha256=UR5qkW9vLtGLC951Om8UWFcQKApZUF-SzUhlIo3YIGU,3069
24
+ rclone_api/cmd/copy_large_s3.py,sha256=3GVr7ZCLyMnVhDysCRGzsd6zlsK_5MUF0kHFZ_i6YbQ,3358
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
@@ -29,12 +29,12 @@ rclone_api/s3/api.py,sha256=VstlaEnBjO2JDQuCRLdTfUGvQLbfshlXXhAzimFv4Vc,3763
29
29
  rclone_api/s3/basic_ops.py,sha256=hK3366xhVEzEcjz9Gk_8lFx6MRceAk72cax6mUrr6ko,2104
30
30
  rclone_api/s3/chunk_file.py,sha256=XPoDl7DJMJIGBMRoPO2wqwqCMT7ZrIsEkDqlbMH8jzs,3506
31
31
  rclone_api/s3/chunk_types.py,sha256=pZUKc3L418XTwET1rLm4eRo_2swKQckSqlc4XjYmhDo,9147
32
- rclone_api/s3/chunk_uploader.py,sha256=Y4I208YoXTJQQke1qRsXARHxBLjJAz9nt_r1mKkplUQ,9670
32
+ rclone_api/s3/chunk_uploader.py,sha256=7Qumc2emQ-SpbnTL8PBN4ElpghnFWJfozVHPhm6LrQ4,9683
33
33
  rclone_api/s3/create.py,sha256=SK3IGHZwsSkoG4Zb4NCphcVg9_f7VifDKng-tExMS2s,3088
34
- rclone_api/s3/types.py,sha256=81_3jwg6MGIxC-GxL-6zANzKO6au9C0BWvAqRyODxOM,1361
35
- rclone_api-1.1.11.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
36
- rclone_api-1.1.11.dist-info/METADATA,sha256=LnxU7g0Hzoe_gvGmz1F0MKU67cRtsJEPk1Gkxe6SQVQ,4479
37
- rclone_api-1.1.11.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
38
- rclone_api-1.1.11.dist-info/entry_points.txt,sha256=6eNqTRXKhVf8CpWNjXiOa_0Du9tHiW_HD2iQSXRsUg8,132
39
- rclone_api-1.1.11.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
40
- rclone_api-1.1.11.dist-info/RECORD,,
34
+ rclone_api/s3/types.py,sha256=yBnJ38Tjk6RlydJ-sqZ7DSfyFloy8KDYJ0mv3vlOzLE,1388
35
+ rclone_api-1.1.12.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
36
+ rclone_api-1.1.12.dist-info/METADATA,sha256=Gs7HUdcg-9dw534zO3eyi5hCNyMXBD0Js5P1fe94mnM,4479
37
+ rclone_api-1.1.12.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
38
+ rclone_api-1.1.12.dist-info/entry_points.txt,sha256=6eNqTRXKhVf8CpWNjXiOa_0Du9tHiW_HD2iQSXRsUg8,132
39
+ rclone_api-1.1.12.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
40
+ rclone_api-1.1.12.dist-info/RECORD,,