rclone-api 1.3.26__tar.gz → 1.3.28__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.
Files changed (100) hide show
  1. {rclone_api-1.3.26 → rclone_api-1.3.28}/PKG-INFO +1 -1
  2. {rclone_api-1.3.26 → rclone_api-1.3.28}/pyproject.toml +1 -1
  3. rclone_api-1.3.28/src/rclone_api/s3/s3_multipart_uploader.py +28 -0
  4. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/upload_file_multipart.py +8 -1
  5. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/types.py +15 -17
  6. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api.egg-info/PKG-INFO +1 -1
  7. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api.egg-info/SOURCES.txt +1 -0
  8. {rclone_api-1.3.26 → rclone_api-1.3.28}/.aiderignore +0 -0
  9. {rclone_api-1.3.26 → rclone_api-1.3.28}/.github/workflows/lint.yml +0 -0
  10. {rclone_api-1.3.26 → rclone_api-1.3.28}/.github/workflows/push_macos.yml +0 -0
  11. {rclone_api-1.3.26 → rclone_api-1.3.28}/.github/workflows/push_ubuntu.yml +0 -0
  12. {rclone_api-1.3.26 → rclone_api-1.3.28}/.github/workflows/push_win.yml +0 -0
  13. {rclone_api-1.3.26 → rclone_api-1.3.28}/.gitignore +0 -0
  14. {rclone_api-1.3.26 → rclone_api-1.3.28}/.pylintrc +0 -0
  15. {rclone_api-1.3.26 → rclone_api-1.3.28}/.vscode/launch.json +0 -0
  16. {rclone_api-1.3.26 → rclone_api-1.3.28}/.vscode/settings.json +0 -0
  17. {rclone_api-1.3.26 → rclone_api-1.3.28}/.vscode/tasks.json +0 -0
  18. {rclone_api-1.3.26 → rclone_api-1.3.28}/LICENSE +0 -0
  19. {rclone_api-1.3.26 → rclone_api-1.3.28}/MANIFEST.in +0 -0
  20. {rclone_api-1.3.26 → rclone_api-1.3.28}/README.md +0 -0
  21. {rclone_api-1.3.26 → rclone_api-1.3.28}/clean +0 -0
  22. {rclone_api-1.3.26 → rclone_api-1.3.28}/install +0 -0
  23. {rclone_api-1.3.26 → rclone_api-1.3.28}/lint +0 -0
  24. {rclone_api-1.3.26 → rclone_api-1.3.28}/requirements.testing.txt +0 -0
  25. {rclone_api-1.3.26 → rclone_api-1.3.28}/setup.cfg +0 -0
  26. {rclone_api-1.3.26 → rclone_api-1.3.28}/setup.py +0 -0
  27. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/__init__.py +0 -0
  28. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/assets/example.txt +0 -0
  29. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/cli.py +0 -0
  30. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/cmd/analyze.py +0 -0
  31. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  32. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/cmd/list_files.py +0 -0
  33. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/cmd/save_to_db.py +0 -0
  34. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/completed_process.py +0 -0
  35. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/config.py +0 -0
  36. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/convert.py +0 -0
  37. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/db/__init__.py +0 -0
  38. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/db/db.py +0 -0
  39. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/db/models.py +0 -0
  40. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/deprecated.py +0 -0
  41. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/diff.py +0 -0
  42. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/dir.py +0 -0
  43. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/dir_listing.py +0 -0
  44. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/exec.py +0 -0
  45. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/experimental/flags.py +0 -0
  46. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/experimental/flags_base.py +0 -0
  47. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/file.py +0 -0
  48. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/file_item.py +0 -0
  49. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/filelist.py +0 -0
  50. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/group_files.py +0 -0
  51. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/http_server.py +0 -0
  52. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/log.py +0 -0
  53. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/mount.py +0 -0
  54. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/mount_read_chunker.py +0 -0
  55. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/process.py +0 -0
  56. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/profile/mount_copy_bytes.py +0 -0
  57. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/rclone.py +0 -0
  58. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/remote.py +0 -0
  59. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/rpath.py +0 -0
  60. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/api.py +0 -0
  61. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/basic_ops.py +0 -0
  62. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/chunk_task.py +0 -0
  63. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/chunk_types.py +0 -0
  64. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/create.py +0 -0
  65. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/s3/types.py +0 -0
  66. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/scan_missing_folders.py +0 -0
  67. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/util.py +0 -0
  68. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api/walk.py +0 -0
  69. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  70. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api.egg-info/entry_points.txt +0 -0
  71. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api.egg-info/requires.txt +0 -0
  72. {rclone_api-1.3.26 → rclone_api-1.3.28}/src/rclone_api.egg-info/top_level.txt +0 -0
  73. {rclone_api-1.3.26 → rclone_api-1.3.28}/test +0 -0
  74. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/archive/test_paramiko.py.disabled +0 -0
  75. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_cmd_list_files.py +0 -0
  76. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_copy.py +0 -0
  77. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_copy_bytes.py +0 -0
  78. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_copy_file_resumable_s3.py +0 -0
  79. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_copy_files.py +0 -0
  80. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_db.py +0 -0
  81. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_diff.py +0 -0
  82. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_file_item.py +0 -0
  83. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_group_files.py +0 -0
  84. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_is_synced.py +0 -0
  85. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_ls.py +0 -0
  86. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_ls_stream_files.py +0 -0
  87. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_mount.py +0 -0
  88. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_mount_s3.py +0 -0
  89. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_obscure.py +0 -0
  90. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_rclone_config.py +0 -0
  91. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_remote_control.py +0 -0
  92. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_remotes.py +0 -0
  93. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_s3.py +0 -0
  94. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_scan_missing_folders.py +0 -0
  95. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_serve_http.py +0 -0
  96. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_size_files.py +0 -0
  97. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_size_suffix.py +0 -0
  98. {rclone_api-1.3.26 → rclone_api-1.3.28}/tests/test_walk.py +0 -0
  99. {rclone_api-1.3.26 → rclone_api-1.3.28}/tox.ini +0 -0
  100. {rclone_api-1.3.26 → rclone_api-1.3.28}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.3.26
3
+ Version: 1.3.28
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -25,7 +25,7 @@ dependencies = [
25
25
  ]
26
26
 
27
27
  # Change this with the version number bump.
28
- version = "1.3.26"
28
+ version = "1.3.28"
29
29
 
30
30
  [tool.setuptools]
31
31
  package-dir = {"" = "src"}
@@ -0,0 +1,28 @@
1
+ import _thread
2
+ import os
3
+ import traceback
4
+ import warnings
5
+ from concurrent.futures import Future, ThreadPoolExecutor
6
+ from pathlib import Path
7
+ from queue import Queue
8
+ from threading import Event, Thread
9
+ from typing import Any, Callable
10
+
11
+ from botocore.client import BaseClient
12
+
13
+ from rclone_api.mount_read_chunker import FilePart
14
+ from rclone_api.s3.chunk_task import S3FileInfo, file_chunker
15
+ from rclone_api.s3.chunk_types import (
16
+ FinishedPiece,
17
+ UploadInfo,
18
+ UploadState,
19
+ )
20
+ from rclone_api.s3.types import MultiUploadResult
21
+ from rclone_api.types import EndOfStream
22
+ from rclone_api.util import locked_print
23
+
24
+
25
+ class S3MultiPartUploader:
26
+
27
+ def __init__(s3_client: BaseClient, bucket_name: str, object_name: str, chunk_size: int, file_size: int):
28
+ pass
@@ -149,6 +149,10 @@ def upload_runner(
149
149
  queue_upload: Queue[FilePart | EndOfStream],
150
150
  cancel_chunker_event: Event,
151
151
  ) -> None:
152
+ # import semaphre
153
+ import threading
154
+
155
+ semaphore = threading.Semaphore(upload_threads)
152
156
  with ThreadPoolExecutor(max_workers=upload_threads) as executor:
153
157
  try:
154
158
  while True:
@@ -159,9 +163,12 @@ def upload_runner(
159
163
  def task(upload_info=upload_info, file_chunk=file_chunk):
160
164
  return handle_upload(upload_info, file_chunk)
161
165
 
166
+ semaphore.acquire()
167
+
162
168
  fut = executor.submit(task)
163
169
 
164
170
  def done_cb(fut=fut):
171
+ semaphore.release()
165
172
  result = fut.result()
166
173
  if isinstance(result, Exception):
167
174
  warnings.warn(f"Error uploading part: {result}, skipping")
@@ -233,7 +240,7 @@ def upload_file_multipart(
233
240
  )
234
241
  return upload_state
235
242
 
236
- work_que_max = upload_threads // 2 + 2
243
+ work_que_max = 1
237
244
 
238
245
  new_state = make_new_state()
239
246
  loaded_state = get_upload_state()
@@ -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, Thread
10
+ from threading import Lock
10
11
  from typing import Any
11
12
 
12
13
 
@@ -291,35 +292,32 @@ atexit.register(_on_exit_cleanup)
291
292
  _FILEPARTS: list["FilePart"] = []
292
293
 
293
294
  _FILEPARTS_LOCK = Lock()
295
+
296
+
294
297
  def _add_filepart(part: "FilePart") -> None:
295
298
  with _FILEPARTS_LOCK:
296
299
  if part not in _FILEPARTS:
297
300
  _FILEPARTS.append(part)
298
301
 
302
+
299
303
  def _remove_filepart(part: "FilePart") -> None:
300
304
  with _FILEPARTS_LOCK:
301
305
  if part in _FILEPARTS:
302
306
  _FILEPARTS.remove(part)
303
307
 
304
308
 
305
-
306
- class ListFileParts(Thread):
307
- def __init__(self):
308
- super().__init__(daemon=True)
309
- self.start()
310
-
311
- def run(self):
312
- while True:
313
- print("File parts:")
314
- for part in _FILEPARTS:
315
- print(part)
316
- print(part.stacktrace)
317
- print("\n")
318
- print("\n\n")
319
- time.sleep(5)
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)
320
317
 
321
318
 
322
- dbg_thread = ListFileParts()
319
+ dbg_thread = threading.Thread(target=run_debug_parts)
320
+ dbg_thread.start()
323
321
 
324
322
 
325
323
  class FilePart:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.3.26
3
+ Version: 1.3.28
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -68,6 +68,7 @@ src/rclone_api/s3/basic_ops.py
68
68
  src/rclone_api/s3/chunk_task.py
69
69
  src/rclone_api/s3/chunk_types.py
70
70
  src/rclone_api/s3/create.py
71
+ src/rclone_api/s3/s3_multipart_uploader.py
71
72
  src/rclone_api/s3/types.py
72
73
  src/rclone_api/s3/upload_file_multipart.py
73
74
  tests/test_cmd_list_files.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