rclone-api 1.3.24__py2.py3-none-any.whl → 1.3.26__py2.py3-none-any.whl

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.
@@ -184,6 +184,9 @@ def file_chunker(
184
184
  logger.info(
185
185
  f"Reading chunk {curr_part_number} of {num_parts} for {file_path}"
186
186
  )
187
+ logger.debug(
188
+ f"Fetching part {curr_part_number} with offset {offset} and size {fetch_size}"
189
+ )
187
190
  fut = fetcher(
188
191
  offset, fetch_size, S3FileInfo(upload_info.upload_id, curr_part_number)
189
192
  )
rclone_api/types.py CHANGED
@@ -6,7 +6,7 @@ import warnings
6
6
  from dataclasses import dataclass
7
7
  from enum import Enum
8
8
  from pathlib import Path
9
- from threading import Lock
9
+ from threading import Lock, Thread
10
10
  from typing import Any
11
11
 
12
12
 
@@ -288,10 +288,52 @@ def _on_exit_cleanup() -> None:
288
288
  atexit.register(_on_exit_cleanup)
289
289
 
290
290
 
291
+ _FILEPARTS: list["FilePart"] = []
292
+
293
+ _FILEPARTS_LOCK = Lock()
294
+ def _add_filepart(part: "FilePart") -> None:
295
+ with _FILEPARTS_LOCK:
296
+ if part not in _FILEPARTS:
297
+ _FILEPARTS.append(part)
298
+
299
+ def _remove_filepart(part: "FilePart") -> None:
300
+ with _FILEPARTS_LOCK:
301
+ if part in _FILEPARTS:
302
+ _FILEPARTS.remove(part)
303
+
304
+
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)
320
+
321
+
322
+ dbg_thread = ListFileParts()
323
+
324
+
291
325
  class FilePart:
292
326
  def __init__(self, payload: Path | bytes | Exception, extra: Any) -> None:
327
+ import traceback
328
+
293
329
  from rclone_api.util import random_str
294
330
 
331
+ stacktrace = traceback.format_stack()
332
+ stacktrace_str = "".join(stacktrace)
333
+ self.stacktrace = stacktrace_str
334
+ # _FILEPARTS.append(self)
335
+ _add_filepart(self)
336
+
295
337
  self.extra = extra
296
338
  self._lock = Lock()
297
339
  self.payload: Path | Exception
@@ -347,6 +389,8 @@ class FilePart:
347
389
  return isinstance(self.payload, Exception)
348
390
 
349
391
  def dispose(self) -> None:
392
+ # _FILEPARTS.remove(self)
393
+ _remove_filepart(self)
350
394
  print("Disposing file part")
351
395
  with self._lock:
352
396
  if isinstance(self.payload, Exception):
@@ -370,3 +414,7 @@ class FilePart:
370
414
 
371
415
  def __del__(self):
372
416
  self.dispose()
417
+
418
+ def __repr__(self):
419
+ payload_str = "err" if self.is_error() else f"{SizeSuffix(self.n_bytes())}"
420
+ return f"FilePart(payload={payload_str}, extra={self.extra})"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.3.24
3
+ Version: 1.3.26
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -21,7 +21,7 @@ rclone_api/rclone.py,sha256=yRhQoCBJI-tfhxySR17a-vSEhWw5cMbk8_WbYs5WqRc,54117
21
21
  rclone_api/remote.py,sha256=jq3dPbAGvYZFW5cTviqxT2w6_jG2LLfS1RIcYSmMsQQ,503
22
22
  rclone_api/rpath.py,sha256=8ZA_1wxWtskwcy0I8V2VbjKDmzPkiWd8Q2JQSvh-sYE,2586
23
23
  rclone_api/scan_missing_folders.py,sha256=Kulca2Q6WZodt00ATFHkmqqInuoPvBkhTcS9703y6po,4740
24
- rclone_api/types.py,sha256=CGwxlnhVgJumwSLukx68ZEM9m2gxLPDcAeVLbzS2JBA,11173
24
+ rclone_api/types.py,sha256=oB5ocftpfD0QBTvrgjyE2XWOW7BYcMz5qqUmY7VVep8,12394
25
25
  rclone_api/util.py,sha256=F9Q3zbWRsgPF4NG6OWB63cZ7GVq82lsraP47gmmDohU,5416
26
26
  rclone_api/walk.py,sha256=-54NVE8EJcCstwDoaC_UtHm73R2HrZwVwQmsnv55xNU,3369
27
27
  rclone_api/assets/example.txt,sha256=lTBovRjiz0_TgtAtbA1C5hNi2ffbqnNPqkKg6UiKCT8,54
@@ -37,14 +37,14 @@ rclone_api/experimental/flags_base.py,sha256=ajU_czkTcAxXYU-SlmiCfHY7aCQGHvpCLqJ
37
37
  rclone_api/profile/mount_copy_bytes.py,sha256=M1vZn-Mrga14Ik7MHGZHbnwYli41Ep6Tyll7hQc7Wmo,9071
38
38
  rclone_api/s3/api.py,sha256=PafsIEyWDpLWAXsZAjFm9CY14vJpsDr9lOsn0kGRLZ0,4009
39
39
  rclone_api/s3/basic_ops.py,sha256=hK3366xhVEzEcjz9Gk_8lFx6MRceAk72cax6mUrr6ko,2104
40
- rclone_api/s3/chunk_task.py,sha256=ZAsVOdiKae0aJ6_YjDuFYG8ZxCfF5jWWMToPM_Li9bo,7286
40
+ rclone_api/s3/chunk_task.py,sha256=AanVCygDoUjmMOUdEIYl-hEpPEGSJTIU_MSFGQ0tI0Q,7421
41
41
  rclone_api/s3/chunk_types.py,sha256=oSWv8No9V3BeM7IcGnowyR2a7YrszdAXzEJlxaeZcp0,8852
42
42
  rclone_api/s3/create.py,sha256=wgfkapv_j904CfKuWyiBIWJVxfAx_ftemFSUV14aT68,3149
43
43
  rclone_api/s3/types.py,sha256=Elmh__gvZJyJyElYwMmvYZIBIunDJiTRAbEg21GmsRU,1604
44
44
  rclone_api/s3/upload_file_multipart.py,sha256=bxAB_SFkyydBBzC_cAv7gShe93nBkFVS-TXwM2Xttfk,12425
45
- rclone_api-1.3.24.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
46
- rclone_api-1.3.24.dist-info/METADATA,sha256=uP9r1gJ4ASyiISJg48vY86hiUBlvib2ZRRhJ_tBaSyg,4628
47
- rclone_api-1.3.24.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
48
- rclone_api-1.3.24.dist-info/entry_points.txt,sha256=fJteOlYVwgX3UbNuL9jJ0zUTuX2O79JFAeNgK7Sw7EQ,255
49
- rclone_api-1.3.24.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
50
- rclone_api-1.3.24.dist-info/RECORD,,
45
+ rclone_api-1.3.26.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
46
+ rclone_api-1.3.26.dist-info/METADATA,sha256=KDIzU1lLhJFRMeGJiJ3CQS-fvB9qa5ulgrA8N9P0IsY,4628
47
+ rclone_api-1.3.26.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
48
+ rclone_api-1.3.26.dist-info/entry_points.txt,sha256=fJteOlYVwgX3UbNuL9jJ0zUTuX2O79JFAeNgK7Sw7EQ,255
49
+ rclone_api-1.3.26.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
50
+ rclone_api-1.3.26.dist-info/RECORD,,