rclone-api 1.0.60__py2.py3-none-any.whl → 1.0.62__py2.py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
rclone_api/rclone.py CHANGED
@@ -47,6 +47,15 @@ class ModTimeStrategy(Enum):
47
47
  NO_MODTIME = "no-modtime"
48
48
 
49
49
 
50
+ class DiffOption(Enum):
51
+ COMBINED = "combined"
52
+ MISSING_ON_SRC = "missing-on-src"
53
+ MISSING_ON_DST = "missing-on-dst"
54
+ DIFFER = "differ"
55
+ MATCH = "match"
56
+ ERROR = "error"
57
+
58
+
50
59
  class Rclone:
51
60
  def __init__(
52
61
  self, rclone_conf: Path | Config, rclone_exe: Path | None = None
@@ -190,6 +199,9 @@ class Rclone:
190
199
  max_size: (
191
200
  str | None
192
201
  ) = None, # e. g. "1GB" - see rclone documentation: https://rclone.org/commands/rclone_check/
202
+ diff_option: DiffOption = DiffOption.COMBINED,
203
+ fast_list: bool = True,
204
+ size_only: bool = False,
193
205
  other_args: list[str] | None = None,
194
206
  ) -> Generator[DiffItem, None, None]:
195
207
  """Be extra careful with the src and dst values. If you are off by one
@@ -203,9 +215,13 @@ class Rclone:
203
215
  "1000",
204
216
  "--log-level",
205
217
  "INFO",
206
- "--combined",
218
+ f"--{diff_option.value}",
207
219
  "-",
208
220
  ]
221
+ if size_only:
222
+ cmd += ["--size-only"]
223
+ if fast_list:
224
+ cmd += ["--fast-list"]
209
225
  if min_size:
210
226
  cmd += ["--min-size", min_size]
211
227
  if max_size:
@@ -299,7 +315,7 @@ class Rclone:
299
315
  self,
300
316
  src: str,
301
317
  dst: str,
302
- files: list[str],
318
+ files: list[str] | Path,
303
319
  check: bool | None = None,
304
320
  verbose: bool | None = None,
305
321
  checkers: int | None = None,
@@ -322,7 +338,11 @@ class Rclone:
322
338
  checkers = checkers or 1000
323
339
  transfers = transfers or 32
324
340
  verbose = get_verbose(verbose)
325
- payload: list[str] = convert_to_filestr_list(files)
341
+ payload: list[str] = (
342
+ files
343
+ if isinstance(files, list)
344
+ else [f.strip() for f in files.read_text().splitlines() if f.strip()]
345
+ )
326
346
  if len(payload) == 0:
327
347
  return []
328
348
 
@@ -341,10 +361,26 @@ class Rclone:
341
361
  with ThreadPoolExecutor(max_workers=max_partition_workers) as executor:
342
362
  for common_prefix, files in datalists.items():
343
363
 
344
- def _task(files=files) -> subprocess.CompletedProcess:
364
+ def _task(
365
+ files: list[str] | Path = files,
366
+ ) -> subprocess.CompletedProcess:
345
367
  with TemporaryDirectory() as tmpdir:
346
- include_files_txt = Path(tmpdir) / "include_files.txt"
347
- include_files_txt.write_text("\n".join(files), encoding="utf-8")
368
+ filelist: list[str] = []
369
+ filepath: Path
370
+ if isinstance(files, list):
371
+ include_files_txt = Path(tmpdir) / "include_files.txt"
372
+ include_files_txt.write_text(
373
+ "\n".join(files), encoding="utf-8"
374
+ )
375
+ filelist = list(files)
376
+ filepath = Path(include_files_txt)
377
+ elif isinstance(files, Path):
378
+ filelist = [
379
+ f.strip()
380
+ for f in files.read_text().splitlines()
381
+ if f.strip()
382
+ ]
383
+ filepath = files
348
384
  if common_prefix:
349
385
  src_path = f"{src}/{common_prefix}"
350
386
  dst_path = f"{dst}/{common_prefix}"
@@ -353,8 +389,8 @@ class Rclone:
353
389
  dst_path = dst
354
390
 
355
391
  if verbose:
356
- nfiles = len(files)
357
- files_fqdn = [f" {src_path}/{f}" for f in files]
392
+ nfiles = len(filelist)
393
+ files_fqdn = [f" {src_path}/{f}" for f in filelist]
358
394
  print(f"Copying {nfiles} files:")
359
395
  chunk_size = 100
360
396
  for i in range(0, nfiles, chunk_size):
@@ -370,7 +406,7 @@ class Rclone:
370
406
  src_path,
371
407
  dst_path,
372
408
  "--files-from",
373
- str(include_files_txt),
409
+ str(filepath),
374
410
  "--checkers",
375
411
  str(checkers),
376
412
  "--transfers",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.60
3
+ Version: 1.0.62
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  Maintainer: Zachary Vorhies
@@ -12,16 +12,16 @@ rclone_api/file.py,sha256=YtR5Y6c0YfXTS-sReOy2UgiSnafcAeO6b2hnbojBQD4,1423
12
12
  rclone_api/filelist.py,sha256=xbiusvNgaB_b_kQOZoHMJJxn6TWGtPrWd2J042BI28o,767
13
13
  rclone_api/group_files.py,sha256=kOHh6ysFDkxjldSwvW6KqmiADUC1yFCdrZRY57TvbGY,5328
14
14
  rclone_api/process.py,sha256=RrMfTe0bndmJ6gBK67ioqNvCstJ8aTC8RlGX1XBLlcw,4191
15
- rclone_api/rclone.py,sha256=XyA9_EOxdOMFv70KvMYjjjGz6ceBEO8xtZ2bKDTftRg,26388
15
+ rclone_api/rclone.py,sha256=XHlsmFRBFPNa9KzUPMQQgEJ9iT7FEByzdFX_x-YHK3E,27660
16
16
  rclone_api/remote.py,sha256=c9hlRKBCg1BFB9MCINaQIoCg10qyAkeqiS4brl8ce-8,343
17
17
  rclone_api/rpath.py,sha256=8ZA_1wxWtskwcy0I8V2VbjKDmzPkiWd8Q2JQSvh-sYE,2586
18
18
  rclone_api/util.py,sha256=_cvmHcJPRl2yXw4zgZiop3z-riA_8Ek6S5NDPw8cqSY,4198
19
19
  rclone_api/walk.py,sha256=UaNOE3ICd8k5ouSFZvkVEH4r2GnnrD9TxfwkFcQnayo,3170
20
20
  rclone_api/assets/example.txt,sha256=lTBovRjiz0_TgtAtbA1C5hNi2ffbqnNPqkKg6UiKCT8,54
21
21
  rclone_api/cmd/list_files.py,sha256=x8FHODEilwKqwdiU1jdkeJbLwOqUkUQuDWPo2u_zpf0,741
22
- rclone_api-1.0.60.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
23
- rclone_api-1.0.60.dist-info/METADATA,sha256=lAw28UzFDwclf7UW2ke9ITEoOxicWHtrYChepRjklk0,4489
24
- rclone_api-1.0.60.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
25
- rclone_api-1.0.60.dist-info/entry_points.txt,sha256=XUoTX3m7CWxdj2VAKhEuO0NMOfX2qf-OcEDFwdyk9ZE,72
26
- rclone_api-1.0.60.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
27
- rclone_api-1.0.60.dist-info/RECORD,,
22
+ rclone_api-1.0.62.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
23
+ rclone_api-1.0.62.dist-info/METADATA,sha256=6kAKTj6uGolJZjeltWjmLlZOK5zPIRnkIhp0Kahs8Ww,4489
24
+ rclone_api-1.0.62.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
25
+ rclone_api-1.0.62.dist-info/entry_points.txt,sha256=XUoTX3m7CWxdj2VAKhEuO0NMOfX2qf-OcEDFwdyk9ZE,72
26
+ rclone_api-1.0.62.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
27
+ rclone_api-1.0.62.dist-info/RECORD,,