rclone-api 1.0.22__py2.py3-none-any.whl → 1.0.24__py2.py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- rclone_api/cmd/list_files.py +27 -0
- rclone_api/rclone.py +52 -0
- {rclone_api-1.0.22.dist-info → rclone_api-1.0.24.dist-info}/METADATA +1 -1
- {rclone_api-1.0.22.dist-info → rclone_api-1.0.24.dist-info}/RECORD +8 -6
- rclone_api-1.0.24.dist-info/entry_points.txt +2 -0
- {rclone_api-1.0.22.dist-info → rclone_api-1.0.24.dist-info}/LICENSE +0 -0
- {rclone_api-1.0.22.dist-info → rclone_api-1.0.24.dist-info}/WHEEL +0 -0
- {rclone_api-1.0.22.dist-info → rclone_api-1.0.24.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
import argparse
|
2
|
+
from pathlib import Path
|
3
|
+
|
4
|
+
from rclone_api import Rclone
|
5
|
+
|
6
|
+
|
7
|
+
def list_files(rclone: Rclone, path: str):
|
8
|
+
"""List files in a remote path."""
|
9
|
+
for dirlisting in rclone.walk(path):
|
10
|
+
for file in dirlisting.files:
|
11
|
+
print(file.path)
|
12
|
+
|
13
|
+
|
14
|
+
def _parse_args() -> argparse.Namespace:
|
15
|
+
parser = argparse.ArgumentParser(description="List files in a remote path.")
|
16
|
+
parser.add_argument("--config", help="Path to rclone config file", required=True)
|
17
|
+
parser.add_argument("path", help="Remote path to list")
|
18
|
+
return parser.parse_args()
|
19
|
+
|
20
|
+
|
21
|
+
def main() -> int:
|
22
|
+
"""Main entry point."""
|
23
|
+
args = _parse_args()
|
24
|
+
path = args.path
|
25
|
+
rclone = Rclone(Path(args.config))
|
26
|
+
list_files(rclone, path)
|
27
|
+
return 0
|
rclone_api/rclone.py
CHANGED
@@ -6,6 +6,7 @@ import subprocess
|
|
6
6
|
import time
|
7
7
|
import warnings
|
8
8
|
from concurrent.futures import ThreadPoolExecutor
|
9
|
+
from enum import Enum
|
9
10
|
from fnmatch import fnmatch
|
10
11
|
from pathlib import Path
|
11
12
|
from typing import Generator
|
@@ -23,6 +24,11 @@ from rclone_api.util import get_rclone_exe, to_path, wait_for_mount
|
|
23
24
|
from rclone_api.walk import walk
|
24
25
|
|
25
26
|
|
27
|
+
class ModTimeStrategy(Enum):
|
28
|
+
USE_SERVER_MODTIME = "use-server-modtime"
|
29
|
+
NO_MODTIME = "no-modtime"
|
30
|
+
|
31
|
+
|
26
32
|
class Rclone:
|
27
33
|
def __init__(
|
28
34
|
self, rclone_conf: Path | Config, rclone_exe: Path | None = None
|
@@ -299,6 +305,7 @@ class Rclone:
|
|
299
305
|
url: str,
|
300
306
|
outdir: Path,
|
301
307
|
vfs_cache_mode="full",
|
308
|
+
vfs_disk_space_total_size: str | None = "10G",
|
302
309
|
other_cmds: list[str] | None = None,
|
303
310
|
) -> Process:
|
304
311
|
"""Mount a remote or directory to a local path.
|
@@ -327,10 +334,55 @@ class Rclone:
|
|
327
334
|
cmd_list.append(vfs_cache_mode)
|
328
335
|
if other_cmds:
|
329
336
|
cmd_list += other_cmds
|
337
|
+
if vfs_disk_space_total_size is not None:
|
338
|
+
cmd_list.append("--vfs-cache-max-size")
|
339
|
+
cmd_list.append(vfs_disk_space_total_size)
|
330
340
|
proc = self._launch_process(cmd_list)
|
331
341
|
wait_for_mount(outdir, proc)
|
332
342
|
return proc
|
333
343
|
|
344
|
+
def mount_s3(
|
345
|
+
self,
|
346
|
+
url: str,
|
347
|
+
outdir: Path,
|
348
|
+
vfs_cache_mode="full",
|
349
|
+
transfers: int | None = 16,
|
350
|
+
modtime_strategy: (
|
351
|
+
ModTimeStrategy | None
|
352
|
+
) = ModTimeStrategy.USE_SERVER_MODTIME, # speeds up S3 operations
|
353
|
+
vfs_read_chunk_streams: int | None = 16,
|
354
|
+
vfs_read_chunk_size: str | None = "4M",
|
355
|
+
vfs_fast_fingerprint: bool = True,
|
356
|
+
other_cmds: list[str] | None = None,
|
357
|
+
) -> Process:
|
358
|
+
"""Mount a remote or directory to a local path.
|
359
|
+
|
360
|
+
Args:
|
361
|
+
src: Remote or directory to mount
|
362
|
+
outdir: Local path to mount to
|
363
|
+
"""
|
364
|
+
other_cmds = other_cmds or []
|
365
|
+
if modtime_strategy is not None:
|
366
|
+
other_cmds.append(f"--{modtime_strategy.value}")
|
367
|
+
if (vfs_cache_mode == "full" or vfs_cache_mode == "writes") and (
|
368
|
+
transfers is not None
|
369
|
+
):
|
370
|
+
other_cmds.append("--transfers")
|
371
|
+
other_cmds.append(str(transfers))
|
372
|
+
if vfs_read_chunk_streams:
|
373
|
+
other_cmds.append("--vfs-read-chunk-streams")
|
374
|
+
other_cmds.append(str(vfs_read_chunk_streams))
|
375
|
+
if vfs_read_chunk_size:
|
376
|
+
other_cmds.append("--vfs-read-chunk-size")
|
377
|
+
other_cmds.append(vfs_read_chunk_size)
|
378
|
+
if vfs_fast_fingerprint:
|
379
|
+
other_cmds.append("--vfs-fast-fingerprint")
|
380
|
+
|
381
|
+
other_cmds = other_cmds if other_cmds else None
|
382
|
+
return self.mount(
|
383
|
+
url, outdir, vfs_cache_mode=vfs_cache_mode, other_cmds=other_cmds
|
384
|
+
)
|
385
|
+
|
334
386
|
def serve_webdav(
|
335
387
|
self,
|
336
388
|
src: Remote | Dir | str,
|
@@ -8,14 +8,16 @@ rclone_api/exec.py,sha256=9qSOpZo8YRYxv3hOvNr57ApnY2KbjxwT1QNr8OgcLM4,883
|
|
8
8
|
rclone_api/file.py,sha256=D02iHJW1LhfOiM_R_yPHP8_ApnDiYrkuraVcrV8-qkw,1246
|
9
9
|
rclone_api/filelist.py,sha256=xbiusvNgaB_b_kQOZoHMJJxn6TWGtPrWd2J042BI28o,767
|
10
10
|
rclone_api/process.py,sha256=iVA8_qtJFgHtg92Yb4W7xv9jnyds_7kAdKeSiGCBIZ0,3952
|
11
|
-
rclone_api/rclone.py,sha256=
|
11
|
+
rclone_api/rclone.py,sha256=jNZVeTPyNH2BwGsA7OIs18PkMSBOmQLxS0yz6dHlkAU,14596
|
12
12
|
rclone_api/remote.py,sha256=c9hlRKBCg1BFB9MCINaQIoCg10qyAkeqiS4brl8ce-8,343
|
13
13
|
rclone_api/rpath.py,sha256=8ZA_1wxWtskwcy0I8V2VbjKDmzPkiWd8Q2JQSvh-sYE,2586
|
14
14
|
rclone_api/util.py,sha256=AWTImA1liCMw52wtS-Gs8Abz96diQ39x6Tx56mvbrEo,3860
|
15
15
|
rclone_api/walk.py,sha256=kca0t1GAnF6FLclN01G8NG__Qe-ggodLtAbQSHyVPng,2968
|
16
16
|
rclone_api/assets/example.txt,sha256=lTBovRjiz0_TgtAtbA1C5hNi2ffbqnNPqkKg6UiKCT8,54
|
17
|
-
rclone_api
|
18
|
-
rclone_api-1.0.
|
19
|
-
rclone_api-1.0.
|
20
|
-
rclone_api-1.0.
|
21
|
-
rclone_api-1.0.
|
17
|
+
rclone_api/cmd/list_files.py,sha256=x8FHODEilwKqwdiU1jdkeJbLwOqUkUQuDWPo2u_zpf0,741
|
18
|
+
rclone_api-1.0.24.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
|
19
|
+
rclone_api-1.0.24.dist-info/METADATA,sha256=6Kv_3ixSg65E3cPLSATze1pRx_O2JMqcxbtDNDC7_cA,4454
|
20
|
+
rclone_api-1.0.24.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
|
21
|
+
rclone_api-1.0.24.dist-info/entry_points.txt,sha256=XUoTX3m7CWxdj2VAKhEuO0NMOfX2qf-OcEDFwdyk9ZE,72
|
22
|
+
rclone_api-1.0.24.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
|
23
|
+
rclone_api-1.0.24.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|