rclone-api 1.0.95__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.
@@ -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,6 +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,
79
+ verbose=args.verbose,
76
80
  )
77
81
  print(rslt)
78
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
@@ -678,6 +678,7 @@ class Rclone:
678
678
  * 1024, # This setting will scale the performance of the upload
679
679
  concurrent_chunks: int = 4, # This setting will scale the performance of the upload
680
680
  retries: int = 3,
681
+ verbose: bool | None = None,
681
682
  max_chunks_before_suspension: int | None = None,
682
683
  mount_path: Path | None = None,
683
684
  ) -> MultiUploadResult:
@@ -710,6 +711,7 @@ class Rclone:
710
711
  mount_path,
711
712
  use_links=True,
712
713
  vfs_cache_mode="minimal",
714
+ verbose=verbose,
713
715
  other_args=other_args,
714
716
  ):
715
717
  # raise NotImplementedError("Not implemented yet")
@@ -743,7 +745,15 @@ class Rclone:
743
745
  raise ValueError(f"Remote {remote} is not an S3 remote")
744
746
  return S3Provider.S3.value
745
747
 
746
- provider: str = get_provider_str() or S3Provider.S3.value
748
+ provider: str
749
+ if provided_provider_str := get_provider_str():
750
+ if verbose:
751
+ print(f"Using provided provider: {provided_provider_str}")
752
+ provider = provided_provider_str
753
+ else:
754
+ if verbose:
755
+ print(f"Using default provider: {S3Provider.S3.value}")
756
+ provider = S3Provider.S3.value
747
757
  provider_enum = S3Provider.from_str(provider)
748
758
 
749
759
  s3_creds: S3Credentials = S3Credentials(
@@ -820,6 +830,7 @@ class Rclone:
820
830
  allow_writes: bool | None = False,
821
831
  use_links: bool | None = None,
822
832
  vfs_cache_mode: str | None = None,
833
+ verbose: bool | None = None,
823
834
  other_args: list[str] | None = None,
824
835
  ) -> Process:
825
836
  """Mount a remote or directory to a local path.
@@ -836,6 +847,7 @@ class Rclone:
836
847
  """
837
848
  allow_writes = allow_writes or False
838
849
  use_links = use_links or True
850
+ verbose = get_verbose(verbose)
839
851
  vfs_cache_mode = vfs_cache_mode or "full"
840
852
  if outdir.exists():
841
853
  is_empty = not list(outdir.iterdir())
@@ -860,6 +872,8 @@ class Rclone:
860
872
  if vfs_cache_mode:
861
873
  cmd_list.append("--vfs-cache-mode")
862
874
  cmd_list.append(vfs_cache_mode)
875
+ if verbose:
876
+ cmd_list.append("-vvvv")
863
877
  if other_args:
864
878
  cmd_list += other_args
865
879
  proc = self._launch_process(cmd_list)
@@ -874,16 +888,19 @@ class Rclone:
874
888
  allow_writes: bool | None = None,
875
889
  use_links: bool | None = None,
876
890
  vfs_cache_mode: str | None = None,
891
+ verbose: bool | None = None,
877
892
  other_args: list[str] | None = None,
878
893
  ) -> Generator[Process, None, None]:
879
894
  """Like mount, but can be used in a context manager."""
880
895
  error_happened = False
896
+ verbose = get_verbose(verbose)
881
897
  proc = self.mount(
882
898
  src,
883
899
  outdir,
884
900
  allow_writes=allow_writes,
885
901
  use_links=use_links,
886
902
  vfs_cache_mode=vfs_cache_mode,
903
+ verbose=verbose,
887
904
  other_args=other_args,
888
905
  )
889
906
  try:
@@ -902,19 +919,32 @@ class Rclone:
902
919
  if outdir.exists():
903
920
  print(f"{outdir} mount still exists, attempting to remove")
904
921
  if not _IS_WINDOWS:
905
- # attempt
906
- os.system(f"fusermount -u {outdir}")
907
- os.system(f"umount {outdir}")
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}")
908
932
  time.sleep(2)
909
933
  if outdir.exists():
910
- is_empty = not list(outdir.iterdir())
911
- if not is_empty:
912
- warnings.warn(f"Failed to unmount {outdir}")
913
- else:
914
- try:
915
- outdir.rmdir()
916
- except Exception as e:
917
- warnings.warn(f"Failed to remove {outdir}: {e}")
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
+ )
918
948
 
919
949
  @deprecated("mount")
920
950
  def mount_webdav(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.95
3
+ Version: 1.0.98
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -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=tXVZv9N83DVVxVwevOo7FyzHCuUGjWx_KP51VwQ0QIY,42246
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=FPU0S1Y9pApVLmWcdMT_3llywjEtOtwobXTnMXE-FhY,2690
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.95.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
31
- rclone_api-1.0.95.dist-info/METADATA,sha256=0nmqVVyNS1ZG1FOKQ1HAsH1gg0h2MgTwXFSlUIERGL4,4479
32
- rclone_api-1.0.95.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
33
- rclone_api-1.0.95.dist-info/entry_points.txt,sha256=6eNqTRXKhVf8CpWNjXiOa_0Du9tHiW_HD2iQSXRsUg8,132
34
- rclone_api-1.0.95.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
35
- rclone_api-1.0.95.dist-info/RECORD,,
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,,