rclone-api 1.1.12__py2.py3-none-any.whl → 1.1.13__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 @@ 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
@@ -28,13 +28,13 @@ rclone_api/experimental/flags_base.py,sha256=ajU_czkTcAxXYU-SlmiCfHY7aCQGHvpCLqJ
28
28
  rclone_api/s3/api.py,sha256=VstlaEnBjO2JDQuCRLdTfUGvQLbfshlXXhAzimFv4Vc,3763
29
29
  rclone_api/s3/basic_ops.py,sha256=hK3366xhVEzEcjz9Gk_8lFx6MRceAk72cax6mUrr6ko,2104
30
30
  rclone_api/s3/chunk_file.py,sha256=XPoDl7DJMJIGBMRoPO2wqwqCMT7ZrIsEkDqlbMH8jzs,3506
31
- rclone_api/s3/chunk_types.py,sha256=pZUKc3L418XTwET1rLm4eRo_2swKQckSqlc4XjYmhDo,9147
31
+ rclone_api/s3/chunk_types.py,sha256=Ihg0nzm6AVyfRfxkU4-WD2BfWBzIpbj2od-hOU-oMIA,10210
32
32
  rclone_api/s3/chunk_uploader.py,sha256=7Qumc2emQ-SpbnTL8PBN4ElpghnFWJfozVHPhm6LrQ4,9683
33
33
  rclone_api/s3/create.py,sha256=SK3IGHZwsSkoG4Zb4NCphcVg9_f7VifDKng-tExMS2s,3088
34
34
  rclone_api/s3/types.py,sha256=yBnJ38Tjk6RlydJ-sqZ7DSfyFloy8KDYJ0mv3vlOzLE,1388
35
- rclone_api-1.1.12.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
36
- rclone_api-1.1.12.dist-info/METADATA,sha256=Gs7HUdcg-9dw534zO3eyi5hCNyMXBD0Js5P1fe94mnM,4479
37
- rclone_api-1.1.12.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
38
- rclone_api-1.1.12.dist-info/entry_points.txt,sha256=6eNqTRXKhVf8CpWNjXiOa_0Du9tHiW_HD2iQSXRsUg8,132
39
- rclone_api-1.1.12.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
40
- rclone_api-1.1.12.dist-info/RECORD,,
35
+ rclone_api-1.1.13.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
36
+ rclone_api-1.1.13.dist-info/METADATA,sha256=l1tZI5VchTG1SzEU4TMuRfT4TDag2CQfby_g97dzs7k,4479
37
+ rclone_api-1.1.13.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
38
+ rclone_api-1.1.13.dist-info/entry_points.txt,sha256=6eNqTRXKhVf8CpWNjXiOa_0Du9tHiW_HD2iQSXRsUg8,132
39
+ rclone_api-1.1.13.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
40
+ rclone_api-1.1.13.dist-info/RECORD,,