rclone-api 1.4.4__tar.gz → 1.4.5__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 (105) hide show
  1. {rclone_api-1.4.4 → rclone_api-1.4.5}/PKG-INFO +1 -1
  2. {rclone_api-1.4.4 → rclone_api-1.4.5}/pyproject.toml +1 -1
  3. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/detail/copy_file_parts.py +8 -0
  4. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/http_server.py +41 -27
  5. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api.egg-info/PKG-INFO +1 -1
  6. {rclone_api-1.4.4 → rclone_api-1.4.5}/.aiderignore +0 -0
  7. {rclone_api-1.4.4 → rclone_api-1.4.5}/.github/workflows/lint.yml +0 -0
  8. {rclone_api-1.4.4 → rclone_api-1.4.5}/.github/workflows/push_macos.yml +0 -0
  9. {rclone_api-1.4.4 → rclone_api-1.4.5}/.github/workflows/push_ubuntu.yml +0 -0
  10. {rclone_api-1.4.4 → rclone_api-1.4.5}/.github/workflows/push_win.yml +0 -0
  11. {rclone_api-1.4.4 → rclone_api-1.4.5}/.gitignore +0 -0
  12. {rclone_api-1.4.4 → rclone_api-1.4.5}/.pylintrc +0 -0
  13. {rclone_api-1.4.4 → rclone_api-1.4.5}/.vscode/launch.json +0 -0
  14. {rclone_api-1.4.4 → rclone_api-1.4.5}/.vscode/settings.json +0 -0
  15. {rclone_api-1.4.4 → rclone_api-1.4.5}/.vscode/tasks.json +0 -0
  16. {rclone_api-1.4.4 → rclone_api-1.4.5}/LICENSE +0 -0
  17. {rclone_api-1.4.4 → rclone_api-1.4.5}/MANIFEST.in +0 -0
  18. {rclone_api-1.4.4 → rclone_api-1.4.5}/README.md +0 -0
  19. {rclone_api-1.4.4 → rclone_api-1.4.5}/clean +0 -0
  20. {rclone_api-1.4.4 → rclone_api-1.4.5}/install +0 -0
  21. {rclone_api-1.4.4 → rclone_api-1.4.5}/lint +0 -0
  22. {rclone_api-1.4.4 → rclone_api-1.4.5}/requirements.testing.txt +0 -0
  23. {rclone_api-1.4.4 → rclone_api-1.4.5}/setup.cfg +0 -0
  24. {rclone_api-1.4.4 → rclone_api-1.4.5}/setup.py +0 -0
  25. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/__init__.py +0 -0
  26. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/assets/example.txt +0 -0
  27. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/cli.py +0 -0
  28. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/cmd/analyze.py +0 -0
  29. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  30. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/cmd/list_files.py +0 -0
  31. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/cmd/save_to_db.py +0 -0
  32. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/completed_process.py +0 -0
  33. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/config.py +0 -0
  34. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/convert.py +0 -0
  35. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/db/__init__.py +0 -0
  36. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/db/db.py +0 -0
  37. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/db/models.py +0 -0
  38. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/deprecated.py +0 -0
  39. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/detail/walk.py +0 -0
  40. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/diff.py +0 -0
  41. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/dir.py +0 -0
  42. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/dir_listing.py +0 -0
  43. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/exec.py +0 -0
  44. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/experimental/flags.py +0 -0
  45. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/experimental/flags_base.py +0 -0
  46. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/file.py +0 -0
  47. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/file_item.py +0 -0
  48. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/file_part.py +0 -0
  49. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/file_stream.py +0 -0
  50. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/filelist.py +0 -0
  51. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/group_files.py +0 -0
  52. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/log.py +0 -0
  53. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/mount.py +0 -0
  54. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/process.py +0 -0
  55. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/rclone_impl.py +0 -0
  56. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/remote.py +0 -0
  57. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/rpath.py +0 -0
  58. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/api.py +0 -0
  59. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/basic_ops.py +0 -0
  60. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/chunk_task.py +0 -0
  61. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/create.py +0 -0
  62. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/multipart/file_info.py +0 -0
  63. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/multipart/finished_piece.py +0 -0
  64. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/multipart/upload_info.py +0 -0
  65. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/multipart/upload_state.py +0 -0
  66. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/s3_multipart_uploader.py +0 -0
  67. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/types.py +0 -0
  68. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/s3/upload_file_multipart.py +0 -0
  69. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/scan_missing_folders.py +0 -0
  70. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/types.py +0 -0
  71. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api/util.py +0 -0
  72. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  73. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  74. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api.egg-info/entry_points.txt +0 -0
  75. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api.egg-info/requires.txt +0 -0
  76. {rclone_api-1.4.4 → rclone_api-1.4.5}/src/rclone_api.egg-info/top_level.txt +0 -0
  77. {rclone_api-1.4.4 → rclone_api-1.4.5}/test +0 -0
  78. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/archive/test_paramiko.py.disabled +0 -0
  79. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_cmd_list_files.py +0 -0
  80. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_copy.py +0 -0
  81. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_copy_bytes.py +0 -0
  82. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_copy_file_resumable_s3.py +0 -0
  83. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_copy_files.py +0 -0
  84. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_db.py +0 -0
  85. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_diff.py +0 -0
  86. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_file_item.py +0 -0
  87. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_group_files.py +0 -0
  88. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_is_synced.py +0 -0
  89. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_ls.py +0 -0
  90. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_ls_stream_files.py +0 -0
  91. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_mount.py +0 -0
  92. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_mount_s3.py +0 -0
  93. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_obscure.py +0 -0
  94. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_rclone_config.py +0 -0
  95. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_read_write_text.py +0 -0
  96. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_remote_control.py +0 -0
  97. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_remotes.py +0 -0
  98. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_s3.py +0 -0
  99. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_scan_missing_folders.py +0 -0
  100. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_serve_http.py +0 -0
  101. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_size_files.py +0 -0
  102. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_size_suffix.py +0 -0
  103. {rclone_api-1.4.4 → rclone_api-1.4.5}/tests/test_walk.py +0 -0
  104. {rclone_api-1.4.4 → rclone_api-1.4.5}/tox.ini +0 -0
  105. {rclone_api-1.4.4 → rclone_api-1.4.5}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.4.4
3
+ Version: 1.4.5
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.4.4"
28
+ version = "1.4.5"
29
29
 
30
30
  [tool.setuptools]
31
31
  package-dir = {"" = "src"}
@@ -9,6 +9,7 @@ from dataclasses import dataclass
9
9
  from datetime import datetime
10
10
  from pathlib import Path
11
11
 
12
+ from rclone_api import rclone_verbose
12
13
  from rclone_api.dir_listing import DirListing
13
14
  from rclone_api.http_server import HttpServer
14
15
  from rclone_api.rclone_impl import RcloneImpl
@@ -18,6 +19,8 @@ from rclone_api.types import (
18
19
  SizeSuffix,
19
20
  )
20
21
 
22
+ rclone_verbose(True)
23
+
21
24
 
22
25
  @dataclass
23
26
  class UploadPart:
@@ -46,6 +49,11 @@ def upload_task(self: RcloneImpl, upload_part: UploadPart) -> UploadPart:
46
49
  try:
47
50
  if upload_part.exception is not None:
48
51
  return upload_part
52
+ # print(f"Uploading {upload_part.chunk} to {upload_part.dst_part}")
53
+ msg = "\n#########################################\n"
54
+ msg += f"# Uploading {upload_part.chunk} to {upload_part.dst_part}\n"
55
+ msg += "#########################################\n"
56
+ print
49
57
  self.copy_to(upload_part.chunk.as_posix(), upload_part.dst_part)
50
58
  return upload_part
51
59
  except Exception as e:
@@ -3,6 +3,7 @@ Unit test file for testing rclone mount functionality.
3
3
  """
4
4
 
5
5
  import tempfile
6
+ import time
6
7
  import warnings
7
8
  from concurrent.futures import Future, ThreadPoolExecutor
8
9
  from pathlib import Path
@@ -63,33 +64,46 @@ class HttpServer:
63
64
  self, path: str, dst: Path, range: Range | None = None
64
65
  ) -> Path | Exception:
65
66
  """Get bytes from the server."""
66
- if not dst.parent.exists():
67
- dst.parent.mkdir(parents=True, exist_ok=True)
68
- headers: dict[str, str] = {}
69
- if range:
70
- headers.update(range.to_header())
71
- url = self._get_file_url(path)
72
- try:
73
- with httpx.stream(
74
- "GET", url, headers=headers, timeout=_TIMEOUT
75
- ) as response:
76
- response.raise_for_status()
77
- with open(dst, "wb") as file:
78
- for chunk in response.iter_bytes(chunk_size=8192):
79
- if chunk:
80
- file.write(chunk)
81
- else:
82
- assert response.is_closed
83
- # print(f"Downloaded bytes {start}-{end} to {dst}")
84
- if range:
85
- print(f"Downloaded bytes {range.start}-{range.end} to {dst}")
86
- else:
87
- size = dst.stat().st_size
88
- print(f"Downloaded {size} bytes to {dst}")
89
- return dst
90
- except Exception as e:
91
- warnings.warn(f"Failed to download {url} to {dst}: {e}")
92
- return e
67
+
68
+ def task() -> Path | Exception:
69
+
70
+ if not dst.parent.exists():
71
+ dst.parent.mkdir(parents=True, exist_ok=True)
72
+ headers: dict[str, str] = {}
73
+ if range:
74
+ headers.update(range.to_header())
75
+ url = self._get_file_url(path)
76
+ try:
77
+ with httpx.stream(
78
+ "GET", url, headers=headers, timeout=_TIMEOUT
79
+ ) as response:
80
+ response.raise_for_status()
81
+ with open(dst, "wb") as file:
82
+ for chunk in response.iter_bytes(chunk_size=8192):
83
+ if chunk:
84
+ file.write(chunk)
85
+ else:
86
+ assert response.is_closed
87
+ # print(f"Downloaded bytes {start}-{end} to {dst}")
88
+ if range:
89
+ print(f"Downloaded bytes {range.start}-{range.end} to {dst}")
90
+ else:
91
+ size = dst.stat().st_size
92
+ print(f"Downloaded {size} bytes to {dst}")
93
+ return dst
94
+ except Exception as e:
95
+ warnings.warn(f"Failed to download {url} to {dst}: {e}")
96
+ return e
97
+
98
+ retries = 3
99
+ for i in _range(retries):
100
+ out = task()
101
+ if not isinstance(out, Exception):
102
+ return out
103
+ warnings.warn(f"Failed to download {path} to {dst}: {out}, retrying ({i})")
104
+ time.sleep(10)
105
+ else:
106
+ return Exception(f"Failed to download {path} to {dst}")
93
107
 
94
108
  def download_multi_threaded(
95
109
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.4.4
3
+ Version: 1.4.5
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
File without changes
File without changes
File without changes
File without changes