rclone-api 1.0.94__tar.gz → 1.0.95__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.94 → rclone_api-1.0.95}/PKG-INFO +1 -1
- {rclone_api-1.0.94 → rclone_api-1.0.95}/pyproject.toml +1 -1
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/s3/api.py +4 -2
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/s3/create.py +17 -8
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.aiderignore +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.gitignore +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.pylintrc +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.vscode/launch.json +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.vscode/settings.json +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/.vscode/tasks.json +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/LICENSE +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/MANIFEST.in +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/README.md +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/clean +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/install +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/lint +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/requirements.testing.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/setup.cfg +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/setup.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/config.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/file.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/process.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/s3/chunk_uploader.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/types.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/util.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/test +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_copy.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_copy_files.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_diff.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_group_files.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_is_synced.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_ls.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_mount.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_mount_webdav.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_mounted_ranged_download.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_obscure.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_remote_control.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_remotes.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_s3.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_size_files.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tests/test_walk.py +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/tox.ini +0 -0
- {rclone_api-1.0.94 → rclone_api-1.0.95}/upload_package.sh +0 -0
|
@@ -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)
|
|
@@ -83,6 +84,7 @@ class S3Client:
|
|
|
83
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
|
|
File without changes
|
|
File without changes
|