rclone-api 1.0.96__py2.py3-none-any.whl → 1.0.98__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.
- rclone_api/cmd/copy_large_s3.py +4 -1
- rclone_api/experimental/flags.py +93 -0
- rclone_api/rclone.py +25 -11
- {rclone_api-1.0.96.dist-info → rclone_api-1.0.98.dist-info}/METADATA +1 -1
- {rclone_api-1.0.96.dist-info → rclone_api-1.0.98.dist-info}/RECORD +9 -8
- {rclone_api-1.0.96.dist-info → rclone_api-1.0.98.dist-info}/LICENSE +0 -0
- {rclone_api-1.0.96.dist-info → rclone_api-1.0.98.dist-info}/WHEEL +0 -0
- {rclone_api-1.0.96.dist-info → rclone_api-1.0.98.dist-info}/entry_points.txt +0 -0
- {rclone_api-1.0.96.dist-info → rclone_api-1.0.98.dist-info}/top_level.txt +0 -0
rclone_api/cmd/copy_large_s3.py
CHANGED
|
@@ -16,6 +16,7 @@ class Args:
|
|
|
16
16
|
read_concurrent_chunks: int
|
|
17
17
|
retries: int
|
|
18
18
|
save_state_json: Path
|
|
19
|
+
verbose: bool
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
def list_files(rclone: Rclone, path: str):
|
|
@@ -29,6 +30,7 @@ def _parse_args() -> Args:
|
|
|
29
30
|
parser = argparse.ArgumentParser(description="List files in a remote path.")
|
|
30
31
|
parser.add_argument("src", help="File to copy")
|
|
31
32
|
parser.add_argument("dst", help="Destination file")
|
|
33
|
+
parser.add_argument("-v", "--verbose", help="Verbose output", action="store_true")
|
|
32
34
|
parser.add_argument(
|
|
33
35
|
"--config", help="Path to rclone config file", type=Path, required=True
|
|
34
36
|
)
|
|
@@ -58,6 +60,7 @@ def _parse_args() -> Args:
|
|
|
58
60
|
read_concurrent_chunks=args.read_concurrent_chunks,
|
|
59
61
|
retries=args.retries,
|
|
60
62
|
save_state_json=args.resumable_json,
|
|
63
|
+
verbose=args.verbose,
|
|
61
64
|
)
|
|
62
65
|
return out
|
|
63
66
|
|
|
@@ -73,7 +76,7 @@ def main() -> int:
|
|
|
73
76
|
concurrent_chunks=args.read_concurrent_chunks,
|
|
74
77
|
retries=args.retries,
|
|
75
78
|
save_state_json=args.save_state_json,
|
|
76
|
-
verbose=
|
|
79
|
+
verbose=args.verbose,
|
|
77
80
|
)
|
|
78
81
|
print(rslt)
|
|
79
82
|
return 0
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@dataclass
|
|
5
|
+
class CopyFlags:
|
|
6
|
+
check_first: bool = False
|
|
7
|
+
checksum: bool = False
|
|
8
|
+
ignore_existing: bool = False
|
|
9
|
+
ignore_times: bool = False
|
|
10
|
+
immutable: bool = False
|
|
11
|
+
inplace: bool = False
|
|
12
|
+
links: bool = False
|
|
13
|
+
metadata: bool = False
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class SyncFlags:
|
|
18
|
+
backup_dir: str | None = None
|
|
19
|
+
delete_after: bool = False
|
|
20
|
+
delete_before: bool = False
|
|
21
|
+
delete_during: bool = False
|
|
22
|
+
ignore_errors: bool = False
|
|
23
|
+
track_renames: bool = False
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass
|
|
27
|
+
class ImportantFlags:
|
|
28
|
+
dry_run: bool = False
|
|
29
|
+
interactive: bool = False
|
|
30
|
+
verbose: int = 0 # 0 = default, 1 = -v, 2 = -vv, etc.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class NetworkingFlags:
|
|
35
|
+
bwlimit: str | None = None
|
|
36
|
+
timeout: str | None = "5m0s"
|
|
37
|
+
tpslimit: float | None = None
|
|
38
|
+
user_agent: str | None = "rclone/v1.69.1"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass
|
|
42
|
+
class PerformanceFlags:
|
|
43
|
+
buffer_size: str | None = "16MiB"
|
|
44
|
+
checkers: int = 8
|
|
45
|
+
transfers: int = 4
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class ConfigFlags:
|
|
50
|
+
config: str | None = None
|
|
51
|
+
ask_password: bool = True
|
|
52
|
+
auto_confirm: bool = False
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass
|
|
56
|
+
class DebuggingFlags:
|
|
57
|
+
cpuprofile: str | None = None
|
|
58
|
+
memprofile: str | None = None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass
|
|
62
|
+
class FilterFlags:
|
|
63
|
+
exclude: list[str] = field(default_factory=list)
|
|
64
|
+
include: list[str] = field(default_factory=list)
|
|
65
|
+
max_age: str | None = None
|
|
66
|
+
min_size: str | None = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@dataclass
|
|
70
|
+
class ListingFlags:
|
|
71
|
+
fast_list: bool = False
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass
|
|
75
|
+
class LoggingFlags:
|
|
76
|
+
log_file: str | None = None
|
|
77
|
+
log_level: str = "NOTICE" # Options: DEBUG, INFO, NOTICE, ERROR
|
|
78
|
+
stats: str | None = "1m0s"
|
|
79
|
+
progress: bool = False
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@dataclass
|
|
83
|
+
class Flags:
|
|
84
|
+
copy: CopyFlags | None = None
|
|
85
|
+
sync: SyncFlags | None = None
|
|
86
|
+
important: ImportantFlags | None = None
|
|
87
|
+
networking: NetworkingFlags | None = None
|
|
88
|
+
performance: PerformanceFlags | None = None
|
|
89
|
+
config: ConfigFlags | None = None
|
|
90
|
+
debugging: DebuggingFlags | None = None
|
|
91
|
+
filter: FilterFlags | None = None
|
|
92
|
+
listing: ListingFlags | None = None
|
|
93
|
+
logging: LoggingFlags | None = None
|
rclone_api/rclone.py
CHANGED
|
@@ -893,6 +893,7 @@ class Rclone:
|
|
|
893
893
|
) -> Generator[Process, None, None]:
|
|
894
894
|
"""Like mount, but can be used in a context manager."""
|
|
895
895
|
error_happened = False
|
|
896
|
+
verbose = get_verbose(verbose)
|
|
896
897
|
proc = self.mount(
|
|
897
898
|
src,
|
|
898
899
|
outdir,
|
|
@@ -918,19 +919,32 @@ class Rclone:
|
|
|
918
919
|
if outdir.exists():
|
|
919
920
|
print(f"{outdir} mount still exists, attempting to remove")
|
|
920
921
|
if not _IS_WINDOWS:
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
922
|
+
def exec(cmd: str) -> int:
|
|
923
|
+
if verbose:
|
|
924
|
+
print(f"Executing: {cmd}")
|
|
925
|
+
rtn = os.system(cmd)
|
|
926
|
+
if rtn != 0 and verbose:
|
|
927
|
+
print(f"Failed to execute: {cmd}")
|
|
928
|
+
return rtn
|
|
929
|
+
|
|
930
|
+
exec(f"fusermount -u {outdir}")
|
|
931
|
+
exec(f"umount {outdir}")
|
|
924
932
|
time.sleep(2)
|
|
925
933
|
if outdir.exists():
|
|
926
|
-
is_empty =
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
+
is_empty = True
|
|
935
|
+
try:
|
|
936
|
+
is_empty = not list(outdir.iterdir())
|
|
937
|
+
if not is_empty:
|
|
938
|
+
warnings.warn(f"Failed to unmount {outdir}")
|
|
939
|
+
else:
|
|
940
|
+
try:
|
|
941
|
+
outdir.rmdir()
|
|
942
|
+
except Exception as e:
|
|
943
|
+
warnings.warn(f"Failed to remove {outdir}: {e}")
|
|
944
|
+
except Exception as e:
|
|
945
|
+
warnings.warn(
|
|
946
|
+
f"Failed during mount cleanup of {outdir}: because {e}"
|
|
947
|
+
)
|
|
934
948
|
|
|
935
949
|
@deprecated("mount")
|
|
936
950
|
def mount_webdav(
|
|
@@ -12,7 +12,7 @@ rclone_api/file.py,sha256=EP5yT2dZ0H2p7CY5n0y5k5pHhIliV25pm8KOwBklUTk,1863
|
|
|
12
12
|
rclone_api/filelist.py,sha256=xbiusvNgaB_b_kQOZoHMJJxn6TWGtPrWd2J042BI28o,767
|
|
13
13
|
rclone_api/group_files.py,sha256=H92xPW9lQnbNw5KbtZCl00bD6iRh9yRbCuxku4j_3dg,8036
|
|
14
14
|
rclone_api/process.py,sha256=RrMfTe0bndmJ6gBK67ioqNvCstJ8aTC8RlGX1XBLlcw,4191
|
|
15
|
-
rclone_api/rclone.py,sha256=
|
|
15
|
+
rclone_api/rclone.py,sha256=eSQNNKS8tO0WHvbMKT_Ov1IIhUxsUy8L0KTOoPpVW-Y,43539
|
|
16
16
|
rclone_api/remote.py,sha256=O9WDUFQy9f6oT1HdUbTixK2eg0xtBBm8k4Xl6aa6K00,431
|
|
17
17
|
rclone_api/rpath.py,sha256=8ZA_1wxWtskwcy0I8V2VbjKDmzPkiWd8Q2JQSvh-sYE,2586
|
|
18
18
|
rclone_api/scan_missing_folders.py,sha256=Kulca2Q6WZodt00ATFHkmqqInuoPvBkhTcS9703y6po,4740
|
|
@@ -20,16 +20,17 @@ rclone_api/types.py,sha256=NC3e78aXCx-sEQ-FqEaC9KzaJDdJhJrKa4Nwum_-Db0,563
|
|
|
20
20
|
rclone_api/util.py,sha256=efck9W0rw5wfeRI35iiEz4dy2cMkNpVXrQ9zzynkBks,5185
|
|
21
21
|
rclone_api/walk.py,sha256=-54NVE8EJcCstwDoaC_UtHm73R2HrZwVwQmsnv55xNU,3369
|
|
22
22
|
rclone_api/assets/example.txt,sha256=lTBovRjiz0_TgtAtbA1C5hNi2ffbqnNPqkKg6UiKCT8,54
|
|
23
|
-
rclone_api/cmd/copy_large_s3.py,sha256=
|
|
23
|
+
rclone_api/cmd/copy_large_s3.py,sha256=33KFvCrh5uk-rdRtkREdEs2WNwxGgTdCAWDLCE4dm0A,2855
|
|
24
24
|
rclone_api/cmd/list_files.py,sha256=x8FHODEilwKqwdiU1jdkeJbLwOqUkUQuDWPo2u_zpf0,741
|
|
25
|
+
rclone_api/experimental/flags.py,sha256=7sJyRU1vh5DgSdpFiv0gom2Aaw1-OP2v4PL5OXEruUo,2083
|
|
25
26
|
rclone_api/s3/api.py,sha256=VstlaEnBjO2JDQuCRLdTfUGvQLbfshlXXhAzimFv4Vc,3763
|
|
26
27
|
rclone_api/s3/basic_ops.py,sha256=hK3366xhVEzEcjz9Gk_8lFx6MRceAk72cax6mUrr6ko,2104
|
|
27
28
|
rclone_api/s3/chunk_uploader.py,sha256=Wcm4h_A6ORaJvT9P9qSeknbJYch22RKZ4FGo1iePlAw,17385
|
|
28
29
|
rclone_api/s3/create.py,sha256=SK3IGHZwsSkoG4Zb4NCphcVg9_f7VifDKng-tExMS2s,3088
|
|
29
30
|
rclone_api/s3/types.py,sha256=81_3jwg6MGIxC-GxL-6zANzKO6au9C0BWvAqRyODxOM,1361
|
|
30
|
-
rclone_api-1.0.
|
|
31
|
-
rclone_api-1.0.
|
|
32
|
-
rclone_api-1.0.
|
|
33
|
-
rclone_api-1.0.
|
|
34
|
-
rclone_api-1.0.
|
|
35
|
-
rclone_api-1.0.
|
|
31
|
+
rclone_api-1.0.98.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
|
|
32
|
+
rclone_api-1.0.98.dist-info/METADATA,sha256=N3rINQp548v5kGCXCnQnS36fdiQME8ifJk4gAv2GaGU,4479
|
|
33
|
+
rclone_api-1.0.98.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
|
|
34
|
+
rclone_api-1.0.98.dist-info/entry_points.txt,sha256=6eNqTRXKhVf8CpWNjXiOa_0Du9tHiW_HD2iQSXRsUg8,132
|
|
35
|
+
rclone_api-1.0.98.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
|
|
36
|
+
rclone_api-1.0.98.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|