rclone-api 1.0.93__tar.gz → 1.0.96__tar.gz
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-1.0.93 → rclone_api-1.0.96}/PKG-INFO +1 -1
- {rclone_api-1.0.93 → rclone_api-1.0.96}/pyproject.toml +1 -1
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/cmd/copy_large_s3.py +1 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/rclone.py +17 -1
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/s3/api.py +5 -3
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/s3/create.py +17 -8
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.aiderignore +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.gitignore +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.pylintrc +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.vscode/launch.json +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.vscode/settings.json +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/.vscode/tasks.json +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/LICENSE +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/MANIFEST.in +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/README.md +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/clean +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/install +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/lint +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/requirements.testing.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/setup.cfg +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/setup.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/config.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/file.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/process.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/s3/chunk_uploader.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/types.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/util.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/test +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_copy.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_copy_files.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_diff.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_group_files.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_is_synced.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_ls.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_mount.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_mount_webdav.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_mounted_ranged_download.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_obscure.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_remote_control.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_remotes.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_s3.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_size_files.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tests/test_walk.py +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/tox.ini +0 -0
- {rclone_api-1.0.93 → rclone_api-1.0.96}/upload_package.sh +0 -0
|
@@ -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
|
|
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,6 +888,7 @@ 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."""
|
|
@@ -884,6 +899,7 @@ class Rclone:
|
|
|
884
899
|
allow_writes=allow_writes,
|
|
885
900
|
use_links=use_links,
|
|
886
901
|
vfs_cache_mode=vfs_cache_mode,
|
|
902
|
+
verbose=verbose,
|
|
887
903
|
other_args=other_args,
|
|
888
904
|
)
|
|
889
905
|
try:
|
|
@@ -17,9 +17,10 @@ _MIN_THRESHOLD_FOR_CHUNKING = 5 * 1024 * 1024
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class S3Client:
|
|
20
|
-
def __init__(self, credentials: S3Credentials):
|
|
20
|
+
def __init__(self, credentials: S3Credentials, verbose: bool = False) -> None:
|
|
21
|
+
self.verbose = verbose
|
|
21
22
|
self.credentials: S3Credentials = credentials
|
|
22
|
-
self.client: BaseClient = create_s3_client(credentials)
|
|
23
|
+
self.client: BaseClient = create_s3_client(credentials, verbose=verbose)
|
|
23
24
|
|
|
24
25
|
def list_bucket_contents(self, bucket_name: str) -> None:
|
|
25
26
|
list_bucket_contents(self.client, bucket_name)
|
|
@@ -80,9 +81,10 @@ class S3Client:
|
|
|
80
81
|
access_key_id = self.credentials.access_key_id[:4] + "..."
|
|
81
82
|
secret = self.credentials.secret_access_key[:4] + "..."
|
|
82
83
|
endpoint_url = self.credentials.endpoint_url
|
|
83
|
-
provider = self.credentials.provider
|
|
84
|
+
provider = self.credentials.provider.value
|
|
84
85
|
region_name = self.credentials.region_name
|
|
85
86
|
info_json = {
|
|
87
|
+
"bucket": bucket_name,
|
|
86
88
|
"key": key,
|
|
87
89
|
"access_key_id": access_key_id[:4] + "...",
|
|
88
90
|
"secret": secret[:4] + "...",
|
|
@@ -6,18 +6,19 @@ from botocore.config import Config
|
|
|
6
6
|
|
|
7
7
|
from rclone_api.s3.types import S3Credentials, S3Provider
|
|
8
8
|
|
|
9
|
+
_DEFAULT_BACKBLAZE_ENDPOINT = "https://s3.us-west-002.backblazeb2.com"
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
# Create a Boto3 session and S3 client, this is back blaze specific.
|
|
11
13
|
# Add a function if you want to use a different S3 provider.
|
|
12
14
|
# If AWS support is added in a fork then please merge it back here.
|
|
13
|
-
def _create_backblaze_s3_client(creds: S3Credentials) -> BaseClient:
|
|
15
|
+
def _create_backblaze_s3_client(creds: S3Credentials, verbose: bool) -> BaseClient:
|
|
14
16
|
"""Create and return an S3 client."""
|
|
15
17
|
region_name = creds.region_name
|
|
16
18
|
access_key = creds.access_key_id
|
|
17
19
|
secret_key = creds.secret_access_key
|
|
18
20
|
endpoint_url = creds.endpoint_url
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
endpoint_url = endpoint_url or _DEFAULT_BACKBLAZE_ENDPOINT
|
|
21
22
|
session = boto3.session.Session() # type: ignore
|
|
22
23
|
return session.client(
|
|
23
24
|
service_name="s3",
|
|
@@ -26,6 +27,7 @@ def _create_backblaze_s3_client(creds: S3Credentials) -> BaseClient:
|
|
|
26
27
|
endpoint_url=endpoint_url,
|
|
27
28
|
config=Config(
|
|
28
29
|
signature_version="s3v4",
|
|
30
|
+
region_name=region_name,
|
|
29
31
|
# Note that BackBlase has a boko3 bug where it doesn't support the new
|
|
30
32
|
# checksum header, the following line was an attempt of fix it on the newest
|
|
31
33
|
# version of boto3, but it didn't work.
|
|
@@ -34,13 +36,16 @@ def _create_backblaze_s3_client(creds: S3Credentials) -> BaseClient:
|
|
|
34
36
|
)
|
|
35
37
|
|
|
36
38
|
|
|
37
|
-
def _create_unknown_s3_client(creds: S3Credentials) -> BaseClient:
|
|
39
|
+
def _create_unknown_s3_client(creds: S3Credentials, verbose: bool) -> BaseClient:
|
|
38
40
|
"""Create and return an S3 client."""
|
|
39
41
|
access_key = creds.access_key_id
|
|
40
42
|
secret_key = creds.secret_access_key
|
|
41
43
|
endpoint_url = creds.endpoint_url
|
|
42
44
|
if (endpoint_url is not None) and not (endpoint_url.startswith("http")):
|
|
43
|
-
|
|
45
|
+
if verbose:
|
|
46
|
+
warnings.warn(
|
|
47
|
+
f"Endpoint URL is schema naive: {endpoint_url}, assuming HTTPS"
|
|
48
|
+
)
|
|
44
49
|
endpoint_url = f"https://{endpoint_url}"
|
|
45
50
|
|
|
46
51
|
session = boto3.session.Session() # type: ignore
|
|
@@ -60,10 +65,14 @@ def _create_unknown_s3_client(creds: S3Credentials) -> BaseClient:
|
|
|
60
65
|
)
|
|
61
66
|
|
|
62
67
|
|
|
63
|
-
def create_s3_client(credentials: S3Credentials) -> BaseClient:
|
|
68
|
+
def create_s3_client(credentials: S3Credentials, verbose=False) -> BaseClient:
|
|
64
69
|
"""Create and return an S3 client."""
|
|
65
70
|
provider = credentials.provider
|
|
66
71
|
if provider == S3Provider.BACKBLAZE:
|
|
67
|
-
|
|
72
|
+
if verbose:
|
|
73
|
+
print("Creating BackBlaze S3 client")
|
|
74
|
+
return _create_backblaze_s3_client(creds=credentials, verbose=verbose)
|
|
68
75
|
else:
|
|
69
|
-
|
|
76
|
+
if verbose:
|
|
77
|
+
print("Creating generic/unknown S3 client")
|
|
78
|
+
return _create_unknown_s3_client(creds=credentials, verbose=verbose)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|