rclone-api 1.1.43__tar.gz → 1.1.44__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 (86) hide show
  1. {rclone_api-1.1.43 → rclone_api-1.1.44}/PKG-INFO +1 -1
  2. {rclone_api-1.1.43 → rclone_api-1.1.44}/pyproject.toml +1 -1
  3. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/rclone.py +5 -2
  4. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/chunk_file.py +12 -1
  5. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/upload_file_multipart.py +27 -17
  6. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api.egg-info/PKG-INFO +1 -1
  7. {rclone_api-1.1.43 → rclone_api-1.1.44}/.aiderignore +0 -0
  8. {rclone_api-1.1.43 → rclone_api-1.1.44}/.github/workflows/lint.yml +0 -0
  9. {rclone_api-1.1.43 → rclone_api-1.1.44}/.github/workflows/push_macos.yml +0 -0
  10. {rclone_api-1.1.43 → rclone_api-1.1.44}/.github/workflows/push_ubuntu.yml +0 -0
  11. {rclone_api-1.1.43 → rclone_api-1.1.44}/.github/workflows/push_win.yml +0 -0
  12. {rclone_api-1.1.43 → rclone_api-1.1.44}/.gitignore +0 -0
  13. {rclone_api-1.1.43 → rclone_api-1.1.44}/.pylintrc +0 -0
  14. {rclone_api-1.1.43 → rclone_api-1.1.44}/.vscode/launch.json +0 -0
  15. {rclone_api-1.1.43 → rclone_api-1.1.44}/.vscode/settings.json +0 -0
  16. {rclone_api-1.1.43 → rclone_api-1.1.44}/.vscode/tasks.json +0 -0
  17. {rclone_api-1.1.43 → rclone_api-1.1.44}/LICENSE +0 -0
  18. {rclone_api-1.1.43 → rclone_api-1.1.44}/MANIFEST.in +0 -0
  19. {rclone_api-1.1.43 → rclone_api-1.1.44}/README.md +0 -0
  20. {rclone_api-1.1.43 → rclone_api-1.1.44}/clean +0 -0
  21. {rclone_api-1.1.43 → rclone_api-1.1.44}/install +0 -0
  22. {rclone_api-1.1.43 → rclone_api-1.1.44}/lint +0 -0
  23. {rclone_api-1.1.43 → rclone_api-1.1.44}/requirements.testing.txt +0 -0
  24. {rclone_api-1.1.43 → rclone_api-1.1.44}/setup.cfg +0 -0
  25. {rclone_api-1.1.43 → rclone_api-1.1.44}/setup.py +0 -0
  26. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/__init__.py +0 -0
  27. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/assets/example.txt +0 -0
  28. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/cli.py +0 -0
  29. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  30. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/cmd/list_files.py +0 -0
  31. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/completed_process.py +0 -0
  32. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/config.py +0 -0
  33. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/convert.py +0 -0
  34. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/deprecated.py +0 -0
  35. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/diff.py +0 -0
  36. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/dir.py +0 -0
  37. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/dir_listing.py +0 -0
  38. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/exec.py +0 -0
  39. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/experimental/flags.py +0 -0
  40. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/experimental/flags_base.py +0 -0
  41. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/file.py +0 -0
  42. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/filelist.py +0 -0
  43. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/group_files.py +0 -0
  44. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/mount.py +0 -0
  45. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/process.py +0 -0
  46. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/profile/mount_copy_bytes.py +0 -0
  47. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/remote.py +0 -0
  48. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/rpath.py +0 -0
  49. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/api.py +0 -0
  50. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/basic_ops.py +0 -0
  51. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/chunk_types.py +0 -0
  52. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/create.py +0 -0
  53. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/s3/types.py +0 -0
  54. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/scan_missing_folders.py +0 -0
  55. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/types.py +0 -0
  56. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/util.py +0 -0
  57. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api/walk.py +0 -0
  58. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  59. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  60. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api.egg-info/entry_points.txt +0 -0
  61. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api.egg-info/requires.txt +0 -0
  62. {rclone_api-1.1.43 → rclone_api-1.1.44}/src/rclone_api.egg-info/top_level.txt +0 -0
  63. {rclone_api-1.1.43 → rclone_api-1.1.44}/test +0 -0
  64. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/archive/test_paramiko.py.disabled +0 -0
  65. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_cmd_list_files.py +0 -0
  66. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_copy.py +0 -0
  67. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_copy_bytes.py +0 -0
  68. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_copy_file_resumable_s3.py +0 -0
  69. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_copy_files.py +0 -0
  70. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_diff.py +0 -0
  71. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_group_files.py +0 -0
  72. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_is_synced.py +0 -0
  73. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_ls.py +0 -0
  74. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_mount.py +0 -0
  75. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_mount_s3.py +0 -0
  76. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_obscure.py +0 -0
  77. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_rclone_config.py +0 -0
  78. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_remote_control.py +0 -0
  79. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_remotes.py +0 -0
  80. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_s3.py +0 -0
  81. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_scan_missing_folders.py +0 -0
  82. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_size_files.py +0 -0
  83. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_size_suffix.py +0 -0
  84. {rclone_api-1.1.43 → rclone_api-1.1.44}/tests/test_walk.py +0 -0
  85. {rclone_api-1.1.43 → rclone_api-1.1.44}/tox.ini +0 -0
  86. {rclone_api-1.1.43 → rclone_api-1.1.44}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.43
3
+ Version: 1.1.44
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -23,7 +23,7 @@ dependencies = [
23
23
  ]
24
24
 
25
25
  # Change this with the version number bump.
26
- version = "1.1.43"
26
+ version = "1.1.44"
27
27
 
28
28
  [tool.setuptools]
29
29
  package-dir = {"" = "src"}
@@ -832,7 +832,10 @@ class Rclone:
832
832
  tmp_mnt = Path("tmp_mnt") / random_str(12)
833
833
  src_parent_path = Path(src).parent.as_posix()
834
834
  src_file = Path(src).name
835
- other_args: list[str] = ["--no-modtime", "--vfs-read-wait", "1s"]
835
+ other_args: list[str] = [
836
+ "--no-modtime",
837
+ # "--vfs-read-wait", "1s"
838
+ ]
836
839
  vfs_read_chunk_size = SizeSuffix(length // transfers)
837
840
  vfs_read_chunk_size_limit = SizeSuffix(length)
838
841
  vfs_read_chunk_streams = transfers
@@ -924,7 +927,7 @@ class Rclone:
924
927
 
925
928
  allow_writes = allow_writes or False
926
929
  use_links = use_links or True
927
- verbose = get_verbose(verbose)
930
+ verbose = get_verbose(verbose) or (log is not None)
928
931
  vfs_cache_mode = vfs_cache_mode or "full"
929
932
  clean_mount(outdir, verbose=verbose)
930
933
  prepare_mount(outdir, verbose=verbose)
@@ -2,6 +2,7 @@ import time
2
2
  import warnings
3
3
  from pathlib import Path
4
4
  from queue import Queue
5
+ from threading import Event
5
6
 
6
7
  from rclone_api.s3.chunk_types import FileChunk, UploadState
7
8
  from rclone_api.util import locked_print
@@ -25,12 +26,16 @@ def _get_file_size(file_path: Path, timeout: int = 60) -> int:
25
26
 
26
27
 
27
28
  def file_chunker(
28
- upload_state: UploadState, max_chunks: int | None, output: Queue[FileChunk | None]
29
+ upload_state: UploadState,
30
+ max_chunks: int | None,
31
+ cancel_signal: Event,
32
+ output: Queue[FileChunk | None],
29
33
  ) -> None:
30
34
  count = 0
31
35
 
32
36
  def should_stop() -> bool:
33
37
  nonlocal count
38
+
34
39
  if max_chunks is None:
35
40
  return False
36
41
  if count >= max_chunks:
@@ -68,6 +73,12 @@ def file_chunker(
68
73
  return None
69
74
  return part_number
70
75
 
76
+ if cancel_signal.is_set():
77
+ print(
78
+ f"Cancel signal is set for file chunker while processing {file_path}, returning"
79
+ )
80
+ return
81
+
71
82
  while not should_stop():
72
83
  curr_parth_num = next_part_number()
73
84
  if curr_parth_num is None:
@@ -5,7 +5,7 @@ import warnings
5
5
  from concurrent.futures import ThreadPoolExecutor
6
6
  from pathlib import Path
7
7
  from queue import Queue
8
- from threading import Thread
8
+ from threading import Event, Thread
9
9
 
10
10
  from botocore.client import BaseClient
11
11
 
@@ -207,16 +207,21 @@ def upload_file_multipart(
207
207
  upload_info = upload_state.upload_info
208
208
 
209
209
  chunker_errors: Queue[Exception] = Queue()
210
+ cancel_chunker_event = Event()
210
211
 
211
212
  def chunker_task(
212
213
  upload_state=upload_state,
213
214
  output=filechunks,
214
215
  max_chunks=max_chunks_before_suspension,
216
+ cancel_signal=cancel_chunker_event,
215
217
  queue_errors=chunker_errors,
216
218
  ) -> None:
217
219
  try:
218
220
  file_chunker(
219
- upload_state=upload_state, output=output, max_chunks=max_chunks
221
+ upload_state=upload_state,
222
+ output=output,
223
+ max_chunks=max_chunks,
224
+ cancel_signal=cancel_signal,
220
225
  )
221
226
  except Exception as e:
222
227
  queue_errors.put(e)
@@ -228,25 +233,30 @@ def upload_file_multipart(
228
233
  thread_chunker.start()
229
234
 
230
235
  with ThreadPoolExecutor(max_workers=upload_threads) as executor:
231
- while True:
232
- file_chunk: FileChunk | None = filechunks.get()
233
- if file_chunk is None:
234
- break
236
+ try:
237
+ while True:
238
+ file_chunk: FileChunk | None = filechunks.get()
239
+ if file_chunk is None:
240
+ break
235
241
 
236
- def task(upload_info=upload_info, file_chunk=file_chunk):
237
- return handle_upload(upload_info, file_chunk)
242
+ def task(upload_info=upload_info, file_chunk=file_chunk):
243
+ return handle_upload(upload_info, file_chunk)
238
244
 
239
- fut = executor.submit(task)
245
+ fut = executor.submit(task)
240
246
 
241
- def done_cb(fut=fut):
242
- result = fut.result()
243
- if isinstance(result, Exception):
244
- warnings.warn(f"Error uploading part: {result}, skipping")
245
- return
246
- # upload_state.finished_parts.put(result)
247
- upload_state.add_finished(result)
247
+ def done_cb(fut=fut):
248
+ result = fut.result()
249
+ if isinstance(result, Exception):
250
+ warnings.warn(f"Error uploading part: {result}, skipping")
251
+ return
252
+ # upload_state.finished_parts.put(result)
253
+ upload_state.add_finished(result)
248
254
 
249
- fut.add_done_callback(done_cb)
255
+ fut.add_done_callback(done_cb)
256
+ except Exception:
257
+ cancel_chunker_event.set()
258
+ executor.shutdown(wait=False, cancel_futures=True)
259
+ raise
250
260
  # upload_state.finished_parts.put(None) # Signal the end of the queue
251
261
  upload_state.add_finished(None)
252
262
  thread_chunker.join()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.43
3
+ Version: 1.1.44
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes