rclone-api 1.1.10__tar.gz → 1.1.11__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 (85) hide show
  1. {rclone_api-1.1.10 → rclone_api-1.1.11}/PKG-INFO +1 -1
  2. {rclone_api-1.1.10 → rclone_api-1.1.11}/pyproject.toml +1 -1
  3. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/chunk_types.py +14 -0
  4. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/chunk_uploader.py +19 -1
  5. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api.egg-info/PKG-INFO +1 -1
  6. {rclone_api-1.1.10 → rclone_api-1.1.11}/.aiderignore +0 -0
  7. {rclone_api-1.1.10 → rclone_api-1.1.11}/.github/workflows/lint.yml +0 -0
  8. {rclone_api-1.1.10 → rclone_api-1.1.11}/.github/workflows/push_macos.yml +0 -0
  9. {rclone_api-1.1.10 → rclone_api-1.1.11}/.github/workflows/push_ubuntu.yml +0 -0
  10. {rclone_api-1.1.10 → rclone_api-1.1.11}/.github/workflows/push_win.yml +0 -0
  11. {rclone_api-1.1.10 → rclone_api-1.1.11}/.gitignore +0 -0
  12. {rclone_api-1.1.10 → rclone_api-1.1.11}/.pylintrc +0 -0
  13. {rclone_api-1.1.10 → rclone_api-1.1.11}/.vscode/launch.json +0 -0
  14. {rclone_api-1.1.10 → rclone_api-1.1.11}/.vscode/settings.json +0 -0
  15. {rclone_api-1.1.10 → rclone_api-1.1.11}/.vscode/tasks.json +0 -0
  16. {rclone_api-1.1.10 → rclone_api-1.1.11}/LICENSE +0 -0
  17. {rclone_api-1.1.10 → rclone_api-1.1.11}/MANIFEST.in +0 -0
  18. {rclone_api-1.1.10 → rclone_api-1.1.11}/README.md +0 -0
  19. {rclone_api-1.1.10 → rclone_api-1.1.11}/clean +0 -0
  20. {rclone_api-1.1.10 → rclone_api-1.1.11}/install +0 -0
  21. {rclone_api-1.1.10 → rclone_api-1.1.11}/lint +0 -0
  22. {rclone_api-1.1.10 → rclone_api-1.1.11}/rclone-mounted-ranged-download.conf.old3393025366 +0 -0
  23. {rclone_api-1.1.10 → rclone_api-1.1.11}/requirements.testing.txt +0 -0
  24. {rclone_api-1.1.10 → rclone_api-1.1.11}/setup.cfg +0 -0
  25. {rclone_api-1.1.10 → rclone_api-1.1.11}/setup.py +0 -0
  26. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/__init__.py +0 -0
  27. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/assets/example.txt +0 -0
  28. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/cli.py +0 -0
  29. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/cmd/copy_large_s3.py +0 -0
  30. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/cmd/list_files.py +0 -0
  31. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/completed_process.py +0 -0
  32. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/config.py +0 -0
  33. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/convert.py +0 -0
  34. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/deprecated.py +0 -0
  35. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/diff.py +0 -0
  36. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/dir.py +0 -0
  37. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/dir_listing.py +0 -0
  38. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/exec.py +0 -0
  39. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/experimental/flags.py +0 -0
  40. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/experimental/flags_base.py +0 -0
  41. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/file.py +0 -0
  42. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/filelist.py +0 -0
  43. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/group_files.py +0 -0
  44. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/mount.py +0 -0
  45. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/process.py +0 -0
  46. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/rclone.py +0 -0
  47. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/remote.py +0 -0
  48. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/rpath.py +0 -0
  49. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/api.py +0 -0
  50. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/basic_ops.py +0 -0
  51. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/chunk_file.py +0 -0
  52. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/create.py +0 -0
  53. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/s3/types.py +0 -0
  54. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/scan_missing_folders.py +0 -0
  55. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/types.py +0 -0
  56. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/util.py +0 -0
  57. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api/walk.py +0 -0
  58. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  59. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  60. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api.egg-info/entry_points.txt +0 -0
  61. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api.egg-info/requires.txt +0 -0
  62. {rclone_api-1.1.10 → rclone_api-1.1.11}/src/rclone_api.egg-info/top_level.txt +0 -0
  63. {rclone_api-1.1.10 → rclone_api-1.1.11}/test +0 -0
  64. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/archive/test_paramiko.py.disabled +0 -0
  65. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_cmd_list_files.py +0 -0
  66. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_copy.py +0 -0
  67. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_copy_files.py +0 -0
  68. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_diff.py +0 -0
  69. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_group_files.py +0 -0
  70. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_is_synced.py +0 -0
  71. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_ls.py +0 -0
  72. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_mount.py +0 -0
  73. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_mount_s3.py +0 -0
  74. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_mounted_ranged_download.py +0 -0
  75. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_obscure.py +0 -0
  76. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_rclone_config.py +0 -0
  77. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_remote_control.py +0 -0
  78. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_remotes.py +0 -0
  79. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_s3.py +0 -0
  80. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_scan_missing_folders.py +0 -0
  81. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_size_files.py +0 -0
  82. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_size_suffix.py +0 -0
  83. {rclone_api-1.1.10 → rclone_api-1.1.11}/tests/test_walk.py +0 -0
  84. {rclone_api-1.1.10 → rclone_api-1.1.11}/tox.ini +0 -0
  85. {rclone_api-1.1.10 → rclone_api-1.1.11}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.10
3
+ Version: 1.1.11
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.10"
24
+ version = "1.1.11"
25
25
 
26
26
  [tool.setuptools]
27
27
  package-dir = {"" = "src"}
@@ -1,3 +1,4 @@
1
+ import hashlib
1
2
  import json
2
3
  import os
3
4
  import time
@@ -103,6 +104,19 @@ class UploadInfo:
103
104
  return
104
105
  self._total_chunks = self.total_chunks()
105
106
 
107
+ def fingerprint(self) -> str:
108
+ # hash the attributes that are used to identify the upload
109
+ hasher = hashlib.sha256()
110
+ # first is file size
111
+ hasher.update(str(self.file_size).encode("utf-8"))
112
+ # second is the file path
113
+ hasher.update(str(self.src_file_path).encode("utf-8"))
114
+ # next is chunk size
115
+ hasher.update(str(self.chunk_size).encode("utf-8"))
116
+ # next is the number of parts
117
+ hasher.update(str(self._total_chunks).encode("utf-8"))
118
+ return hasher.hexdigest()
119
+
106
120
  def to_json(self) -> dict:
107
121
  json_dict = {}
108
122
  for f in fields(self):
@@ -162,7 +162,25 @@ def upload_file_multipart(
162
162
  return upload_state
163
163
 
164
164
  filechunks: Queue[FileChunk | None] = Queue(10)
165
- upload_state = get_upload_state() or make_new_state()
165
+ new_state = make_new_state()
166
+ loaded_state = get_upload_state()
167
+
168
+ if loaded_state is None:
169
+ upload_state = new_state
170
+ else:
171
+ # if the file size has changed, we cannot resume
172
+ if (
173
+ loaded_state.upload_info.fingerprint()
174
+ != new_state.upload_info.fingerprint()
175
+ ):
176
+ locked_print(
177
+ f"Cannot resume upload: file size changed, starting over for {file_path}"
178
+ )
179
+ _abort_previous_upload(loaded_state)
180
+ upload_state = new_state
181
+ else:
182
+ upload_state = loaded_state
183
+
166
184
  try:
167
185
  upload_state.update_source_file(file_path)
168
186
  except ValueError as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.1.10
3
+ Version: 1.1.11
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