rclone-api 1.1.12__tar.gz → 1.1.13__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 (84) hide show
  1. {rclone_api-1.1.12 → rclone_api-1.1.13}/PKG-INFO +1 -1
  2. {rclone_api-1.1.12 → rclone_api-1.1.13}/pyproject.toml +1 -1
  3. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/chunk_types.py +26 -0
  4. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api.egg-info/PKG-INFO +1 -1
  5. {rclone_api-1.1.12 → rclone_api-1.1.13}/.aiderignore +0 -0
  6. {rclone_api-1.1.12 → rclone_api-1.1.13}/.github/workflows/lint.yml +0 -0
  7. {rclone_api-1.1.12 → rclone_api-1.1.13}/.github/workflows/push_macos.yml +0 -0
  8. {rclone_api-1.1.12 → rclone_api-1.1.13}/.github/workflows/push_ubuntu.yml +0 -0
  9. {rclone_api-1.1.12 → rclone_api-1.1.13}/.github/workflows/push_win.yml +0 -0
  10. {rclone_api-1.1.12 → rclone_api-1.1.13}/.gitignore +0 -0
  11. {rclone_api-1.1.12 → rclone_api-1.1.13}/.pylintrc +0 -0
  12. {rclone_api-1.1.12 → rclone_api-1.1.13}/.vscode/launch.json +0 -0
  13. {rclone_api-1.1.12 → rclone_api-1.1.13}/.vscode/settings.json +0 -0
  14. {rclone_api-1.1.12 → rclone_api-1.1.13}/.vscode/tasks.json +0 -0
  15. {rclone_api-1.1.12 → rclone_api-1.1.13}/LICENSE +0 -0
  16. {rclone_api-1.1.12 → rclone_api-1.1.13}/MANIFEST.in +0 -0
  17. {rclone_api-1.1.12 → rclone_api-1.1.13}/README.md +0 -0
  18. {rclone_api-1.1.12 → rclone_api-1.1.13}/clean +0 -0
  19. {rclone_api-1.1.12 → rclone_api-1.1.13}/install +0 -0
  20. {rclone_api-1.1.12 → rclone_api-1.1.13}/lint +0 -0
  21. {rclone_api-1.1.12 → rclone_api-1.1.13}/requirements.testing.txt +0 -0
  22. {rclone_api-1.1.12 → rclone_api-1.1.13}/setup.cfg +0 -0
  23. {rclone_api-1.1.12 → rclone_api-1.1.13}/setup.py +0 -0
  24. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/__init__.py +0 -0
  25. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/assets/example.txt +0 -0
  26. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/cli.py +0 -0
  27. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  28. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/cmd/list_files.py +0 -0
  29. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/completed_process.py +0 -0
  30. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/config.py +0 -0
  31. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/convert.py +0 -0
  32. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/deprecated.py +0 -0
  33. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/diff.py +0 -0
  34. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/dir.py +0 -0
  35. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/dir_listing.py +0 -0
  36. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/exec.py +0 -0
  37. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/experimental/flags.py +0 -0
  38. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/experimental/flags_base.py +0 -0
  39. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/file.py +0 -0
  40. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/filelist.py +0 -0
  41. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/group_files.py +0 -0
  42. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/mount.py +0 -0
  43. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/process.py +0 -0
  44. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/rclone.py +0 -0
  45. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/remote.py +0 -0
  46. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/rpath.py +0 -0
  47. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/api.py +0 -0
  48. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/basic_ops.py +0 -0
  49. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/chunk_file.py +0 -0
  50. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/chunk_uploader.py +0 -0
  51. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/create.py +0 -0
  52. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/s3/types.py +0 -0
  53. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/scan_missing_folders.py +0 -0
  54. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/types.py +0 -0
  55. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/util.py +0 -0
  56. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api/walk.py +0 -0
  57. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  58. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  59. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api.egg-info/entry_points.txt +0 -0
  60. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api.egg-info/requires.txt +0 -0
  61. {rclone_api-1.1.12 → rclone_api-1.1.13}/src/rclone_api.egg-info/top_level.txt +0 -0
  62. {rclone_api-1.1.12 → rclone_api-1.1.13}/test +0 -0
  63. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/archive/test_paramiko.py.disabled +0 -0
  64. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_cmd_list_files.py +0 -0
  65. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_copy.py +0 -0
  66. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_copy_files.py +0 -0
  67. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_diff.py +0 -0
  68. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_group_files.py +0 -0
  69. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_is_synced.py +0 -0
  70. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_ls.py +0 -0
  71. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_mount.py +0 -0
  72. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_mount_s3.py +0 -0
  73. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_mounted_ranged_download.py +0 -0
  74. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_obscure.py +0 -0
  75. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_rclone_config.py +0 -0
  76. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_remote_control.py +0 -0
  77. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_remotes.py +0 -0
  78. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_s3.py +0 -0
  79. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_scan_missing_folders.py +0 -0
  80. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_size_files.py +0 -0
  81. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_size_suffix.py +0 -0
  82. {rclone_api-1.1.12 → rclone_api-1.1.13}/tests/test_walk.py +0 -0
  83. {rclone_api-1.1.12 → rclone_api-1.1.13}/tox.ini +0 -0
  84. {rclone_api-1.1.12 → rclone_api-1.1.13}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.12
3
+ Version: 1.1.13
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 @@ dependencies = [
21
21
  ]
22
22
 
23
23
  # Change this with the version number bump.
24
- version = "1.1.12"
24
+ version = "1.1.13"
25
25
 
26
26
  [tool.setuptools]
27
27
  package-dir = {"" = "src"}
@@ -184,6 +184,9 @@ class UploadState:
184
184
  def is_done(self) -> bool:
185
185
  return self.remaining() == 0
186
186
 
187
+ def fingerprint(self) -> str:
188
+ return self.upload_info.fingerprint()
189
+
187
190
  def count(self) -> tuple[int, int]: # count, num_chunks
188
191
  num_chunks = self.upload_info.total_chunks()
189
192
  count = 0
@@ -218,8 +221,31 @@ class UploadState:
218
221
 
219
222
  def save(self) -> None:
220
223
  with _SAVE_STATE_LOCK:
224
+
225
+ self._check_fingerprint_no_lock()
226
+
221
227
  self._save_no_lock()
222
228
 
229
+ def _check_fingerprint_no_lock(self) -> None:
230
+ if self.peristant is None:
231
+ raise ValueError("No path to save to")
232
+ s3_client = self.upload_info.s3_client
233
+ path = self.peristant
234
+ last_upload_state: UploadState | None = None
235
+ if path.exists():
236
+ try:
237
+ last_upload_state = UploadState.from_json(s3_client, path)
238
+ except Exception as e:
239
+ locked_print(f"Error loading state: {e}")
240
+ last_upload_state = None
241
+ # now check that the fingerprint is the same
242
+ if last_upload_state is not None:
243
+ curr_fingerprint = self.fingerprint()
244
+ if curr_fingerprint != last_upload_state.fingerprint():
245
+ raise ValueError(
246
+ f"Cannot save state, fingerprint changed from {curr_fingerprint} to {self.upload_info.fingerprint()}"
247
+ )
248
+
223
249
  def _save_no_lock(self) -> None:
224
250
  assert self.peristant is not None, "No path to save to"
225
251
  self.peristant.write_text(self.to_json_str(), encoding="utf-8")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.12
3
+ Version: 1.1.13
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