rclone-api 1.1.33__tar.gz → 1.1.37__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.1.33 → rclone_api-1.1.37}/PKG-INFO +1 -1
- {rclone_api-1.1.33 → rclone_api-1.1.37}/pyproject.toml +3 -2
- {rclone_api-1.1.33/src/rclone_api/profiling → rclone_api-1.1.37/src/rclone_api/profile}/mount_copy_bytes.py +42 -4
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api.egg-info/SOURCES.txt +1 -1
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api.egg-info/entry_points.txt +1 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.aiderignore +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.gitignore +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.pylintrc +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.vscode/launch.json +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.vscode/settings.json +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/.vscode/tasks.json +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/LICENSE +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/MANIFEST.in +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/README.md +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/clean +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/install +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/lint +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/requirements.testing.txt +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/setup.cfg +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/setup.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/config.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/experimental/flags_base.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/file.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/mount.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/process.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/chunk_file.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/chunk_types.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/s3/upload_file_multipart.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/types.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/util.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/test +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_copy.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_copy_bytes.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_copy_file_resumable_s3.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_copy_files.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_diff.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_group_files.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_is_synced.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_ls.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_mount.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_obscure.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_remote_control.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_remotes.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_s3.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_size_files.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_size_suffix.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tests/test_walk.py +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/tox.ini +0 -0
- {rclone_api-1.1.33 → rclone_api-1.1.37}/upload_package.sh +0 -0
|
@@ -23,7 +23,7 @@ dependencies = [
|
|
|
23
23
|
]
|
|
24
24
|
|
|
25
25
|
# Change this with the version number bump.
|
|
26
|
-
version = "1.1.
|
|
26
|
+
version = "1.1.37"
|
|
27
27
|
|
|
28
28
|
[tool.setuptools]
|
|
29
29
|
package-dir = {"" = "src"}
|
|
@@ -54,4 +54,5 @@ disable_error_code = ["import-untyped"]
|
|
|
54
54
|
|
|
55
55
|
[project.scripts]
|
|
56
56
|
rclone-api-listfiles = "rclone_api.cmd.list_files:main"
|
|
57
|
-
rclone-api-copylarge-s3 = "rclone_api.cmd.copy_large_s3:main"
|
|
57
|
+
rclone-api-copylarge-s3 = "rclone_api.cmd.copy_large_s3:main"
|
|
58
|
+
rclone-api-profile-mount = "rclone_api.profile.mount_copy_bytes:main"
|
|
@@ -4,6 +4,8 @@ Unit test file.
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
6
|
import time
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from pathlib import Path
|
|
7
9
|
|
|
8
10
|
import psutil
|
|
9
11
|
from dotenv import load_dotenv
|
|
@@ -15,7 +17,21 @@ load_dotenv()
|
|
|
15
17
|
BUCKET_NAME = os.getenv("BUCKET_NAME") # Default if not in .env
|
|
16
18
|
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
@dataclass
|
|
21
|
+
class Credentials:
|
|
22
|
+
BUCKET_KEY_SECRET: str
|
|
23
|
+
BUCKET_KEY_PUBLIC: str
|
|
24
|
+
SRC_SFTP_HOST: str
|
|
25
|
+
SRC_SFTP_USER: str
|
|
26
|
+
SRC_SFTP_PORT: str
|
|
27
|
+
SRC_SFTP_PASS: str
|
|
28
|
+
BUCKET_URL: str
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _generate_rclone_config() -> tuple[Config, Credentials]:
|
|
32
|
+
|
|
33
|
+
cwd = Path.cwd()
|
|
34
|
+
print(f"Current working directory: {cwd}")
|
|
19
35
|
|
|
20
36
|
# assert that .env exists for this test
|
|
21
37
|
assert os.path.exists(
|
|
@@ -51,9 +67,22 @@ port = {SRC_SFTP_PORT}
|
|
|
51
67
|
pass = {SRC_SFTP_PASS}
|
|
52
68
|
|
|
53
69
|
"""
|
|
70
|
+
print("Config text:")
|
|
71
|
+
print(config_text)
|
|
54
72
|
# _CONFIG_PATH.write_text(config_text, encoding="utf-8")
|
|
55
73
|
# print(f"Config file written to: {_CONFIG_PATH}")
|
|
56
|
-
|
|
74
|
+
|
|
75
|
+
creds = Credentials(
|
|
76
|
+
BUCKET_KEY_SECRET=str(BUCKET_KEY_SECRET),
|
|
77
|
+
BUCKET_KEY_PUBLIC=str(BUCKET_KEY_PUBLIC),
|
|
78
|
+
SRC_SFTP_HOST=str(SRC_SFTP_HOST),
|
|
79
|
+
SRC_SFTP_USER=str(SRC_SFTP_USER),
|
|
80
|
+
SRC_SFTP_PORT=str(SRC_SFTP_PORT),
|
|
81
|
+
SRC_SFTP_PASS=str(SRC_SFTP_PASS),
|
|
82
|
+
BUCKET_URL=str(BUCKET_URL),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
return Config(config_text), creds
|
|
57
86
|
|
|
58
87
|
|
|
59
88
|
def _init() -> None:
|
|
@@ -72,7 +101,13 @@ def _init() -> None:
|
|
|
72
101
|
|
|
73
102
|
def test_profile_copy_bytes() -> None:
|
|
74
103
|
print("Running test_profile_copy_bytes")
|
|
75
|
-
|
|
104
|
+
config, creds = _generate_rclone_config()
|
|
105
|
+
print("Config:")
|
|
106
|
+
print(config)
|
|
107
|
+
print("Credentials:")
|
|
108
|
+
print(creds)
|
|
109
|
+
rclone = Rclone(config)
|
|
110
|
+
|
|
76
111
|
sizes = [
|
|
77
112
|
1024 * 1024 * 1,
|
|
78
113
|
1024 * 1024 * 2,
|
|
@@ -91,6 +126,7 @@ def test_profile_copy_bytes() -> None:
|
|
|
91
126
|
|
|
92
127
|
for size in sizes:
|
|
93
128
|
for transfers in transfer_list:
|
|
129
|
+
mount_log = Path("logs") / "mount" / f"mount_{size}_{transfers}.log"
|
|
94
130
|
print("\n\n")
|
|
95
131
|
print("#" * 80)
|
|
96
132
|
print(
|
|
@@ -105,12 +141,14 @@ def test_profile_copy_bytes() -> None:
|
|
|
105
141
|
length=size,
|
|
106
142
|
direct_io=True,
|
|
107
143
|
transfers=transfers,
|
|
144
|
+
mount_log=mount_log,
|
|
108
145
|
)
|
|
109
146
|
diff = time.time() - start
|
|
110
147
|
net_io_end = psutil.net_io_counters()
|
|
111
148
|
if isinstance(bytes_or_err, Exception):
|
|
112
149
|
print(bytes_or_err)
|
|
113
|
-
|
|
150
|
+
stack_trace = bytes_or_err.__traceback__
|
|
151
|
+
assert False, f"Error: {bytes_or_err}\nStack trace:\n{stack_trace}"
|
|
114
152
|
assert isinstance(bytes_or_err, bytes)
|
|
115
153
|
# self.assertEqual(len(bytes_or_err), size)
|
|
116
154
|
assert len(bytes_or_err) == size, f"Length: {len(bytes_or_err)} != {size}"
|
|
@@ -53,7 +53,7 @@ src/rclone_api/cmd/copy_large_s3.py
|
|
|
53
53
|
src/rclone_api/cmd/list_files.py
|
|
54
54
|
src/rclone_api/experimental/flags.py
|
|
55
55
|
src/rclone_api/experimental/flags_base.py
|
|
56
|
-
src/rclone_api/
|
|
56
|
+
src/rclone_api/profile/mount_copy_bytes.py
|
|
57
57
|
src/rclone_api/s3/api.py
|
|
58
58
|
src/rclone_api/s3/basic_ops.py
|
|
59
59
|
src/rclone_api/s3/chunk_file.py
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|