rclone-api 1.3.25__tar.gz → 1.3.27__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.3.25 → rclone_api-1.3.27}/PKG-INFO +1 -1
- {rclone_api-1.3.25 → rclone_api-1.3.27}/pyproject.toml +1 -1
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/types.py +35 -18
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api.egg-info/PKG-INFO +1 -1
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.aiderignore +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.github/workflows/lint.yml +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.github/workflows/push_macos.yml +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.github/workflows/push_ubuntu.yml +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.github/workflows/push_win.yml +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.gitignore +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.pylintrc +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.vscode/launch.json +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.vscode/settings.json +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/.vscode/tasks.json +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/LICENSE +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/MANIFEST.in +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/README.md +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/clean +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/install +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/lint +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/requirements.testing.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/setup.cfg +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/setup.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/__init__.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/assets/example.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/cli.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/cmd/analyze.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/cmd/copy_large_s3.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/cmd/list_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/cmd/save_to_db.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/completed_process.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/config.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/convert.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/db/__init__.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/db/db.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/db/models.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/deprecated.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/diff.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/dir.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/dir_listing.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/exec.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/experimental/flags.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/experimental/flags_base.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/file.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/file_item.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/filelist.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/group_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/http_server.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/log.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/mount.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/mount_read_chunker.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/process.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/profile/mount_copy_bytes.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/rclone.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/remote.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/rpath.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/api.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/basic_ops.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/chunk_task.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/chunk_types.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/create.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/types.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/s3/upload_file_multipart.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/scan_missing_folders.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/util.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api/walk.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api.egg-info/SOURCES.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api.egg-info/dependency_links.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api.egg-info/entry_points.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api.egg-info/requires.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/src/rclone_api.egg-info/top_level.txt +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/test +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/archive/test_paramiko.py.disabled +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_cmd_list_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_copy.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_copy_bytes.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_copy_file_resumable_s3.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_copy_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_db.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_diff.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_file_item.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_group_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_is_synced.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_ls.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_ls_stream_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_mount.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_mount_s3.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_obscure.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_rclone_config.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_remote_control.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_remotes.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_s3.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_scan_missing_folders.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_serve_http.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_size_files.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_size_suffix.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tests/test_walk.py +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/tox.ini +0 -0
- {rclone_api-1.3.25 → rclone_api-1.3.27}/upload_package.sh +0 -0
@@ -1,12 +1,13 @@
|
|
1
1
|
import atexit
|
2
2
|
import os
|
3
3
|
import re
|
4
|
+
import threading
|
4
5
|
import time
|
5
6
|
import warnings
|
6
7
|
from dataclasses import dataclass
|
7
8
|
from enum import Enum
|
8
9
|
from pathlib import Path
|
9
|
-
from threading import Lock
|
10
|
+
from threading import Lock
|
10
11
|
from typing import Any
|
11
12
|
|
12
13
|
|
@@ -290,24 +291,33 @@ atexit.register(_on_exit_cleanup)
|
|
290
291
|
|
291
292
|
_FILEPARTS: list["FilePart"] = []
|
292
293
|
|
294
|
+
_FILEPARTS_LOCK = Lock()
|
293
295
|
|
294
|
-
class ListFileParts(Thread):
|
295
|
-
def __init__(self):
|
296
|
-
super().__init__(daemon=True)
|
297
|
-
self.start()
|
298
296
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
print(part)
|
304
|
-
print(part.stacktrace)
|
305
|
-
print("\n")
|
306
|
-
print("\n\n")
|
307
|
-
time.sleep(5)
|
297
|
+
def _add_filepart(part: "FilePart") -> None:
|
298
|
+
with _FILEPARTS_LOCK:
|
299
|
+
if part not in _FILEPARTS:
|
300
|
+
_FILEPARTS.append(part)
|
308
301
|
|
309
302
|
|
310
|
-
|
303
|
+
def _remove_filepart(part: "FilePart") -> None:
|
304
|
+
with _FILEPARTS_LOCK:
|
305
|
+
if part in _FILEPARTS:
|
306
|
+
_FILEPARTS.remove(part)
|
307
|
+
|
308
|
+
|
309
|
+
def run_debug_parts():
|
310
|
+
while True:
|
311
|
+
print("\nAlive file parts:")
|
312
|
+
for part in list(_FILEPARTS):
|
313
|
+
print(part)
|
314
|
+
# print(part.stacktrace)
|
315
|
+
print("\n\n")
|
316
|
+
time.sleep(60)
|
317
|
+
|
318
|
+
|
319
|
+
dbg_thread = threading.Thread(target=run_debug_parts)
|
320
|
+
dbg_thread.start()
|
311
321
|
|
312
322
|
|
313
323
|
class FilePart:
|
@@ -317,8 +327,10 @@ class FilePart:
|
|
317
327
|
from rclone_api.util import random_str
|
318
328
|
|
319
329
|
stacktrace = traceback.format_stack()
|
320
|
-
|
321
|
-
|
330
|
+
stacktrace_str = "".join(stacktrace)
|
331
|
+
self.stacktrace = stacktrace_str
|
332
|
+
# _FILEPARTS.append(self)
|
333
|
+
_add_filepart(self)
|
322
334
|
|
323
335
|
self.extra = extra
|
324
336
|
self._lock = Lock()
|
@@ -375,7 +387,8 @@ class FilePart:
|
|
375
387
|
return isinstance(self.payload, Exception)
|
376
388
|
|
377
389
|
def dispose(self) -> None:
|
378
|
-
_FILEPARTS.remove(self)
|
390
|
+
# _FILEPARTS.remove(self)
|
391
|
+
_remove_filepart(self)
|
379
392
|
print("Disposing file part")
|
380
393
|
with self._lock:
|
381
394
|
if isinstance(self.payload, Exception):
|
@@ -399,3 +412,7 @@ class FilePart:
|
|
399
412
|
|
400
413
|
def __del__(self):
|
401
414
|
self.dispose()
|
415
|
+
|
416
|
+
def __repr__(self):
|
417
|
+
payload_str = "err" if self.is_error() else f"{SizeSuffix(self.n_bytes())}"
|
418
|
+
return f"FilePart(payload={payload_str}, extra={self.extra})"
|
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
|
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
|