rclone-api 1.0.36__tar.gz → 1.0.38__tar.gz

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rclone-api might be problematic. Click here for more details.

Files changed (62) hide show
  1. {rclone_api-1.0.36 → rclone_api-1.0.38}/PKG-INFO +1 -1
  2. {rclone_api-1.0.36 → rclone_api-1.0.38}/pyproject.toml +1 -1
  3. rclone_api-1.0.38/src/rclone_api/completed_process.py +15 -0
  4. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/diff.py +0 -1
  5. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/rclone.py +32 -18
  6. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api.egg-info/PKG-INFO +1 -1
  7. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api.egg-info/SOURCES.txt +1 -0
  8. {rclone_api-1.0.36 → rclone_api-1.0.38}/.aiderignore +0 -0
  9. {rclone_api-1.0.36 → rclone_api-1.0.38}/.github/workflows/lint.yml +0 -0
  10. {rclone_api-1.0.36 → rclone_api-1.0.38}/.github/workflows/push_macos.yml +0 -0
  11. {rclone_api-1.0.36 → rclone_api-1.0.38}/.github/workflows/push_ubuntu.yml +0 -0
  12. {rclone_api-1.0.36 → rclone_api-1.0.38}/.github/workflows/push_win.yml +0 -0
  13. {rclone_api-1.0.36 → rclone_api-1.0.38}/.gitignore +0 -0
  14. {rclone_api-1.0.36 → rclone_api-1.0.38}/.pylintrc +0 -0
  15. {rclone_api-1.0.36 → rclone_api-1.0.38}/.vscode/launch.json +0 -0
  16. {rclone_api-1.0.36 → rclone_api-1.0.38}/.vscode/settings.json +0 -0
  17. {rclone_api-1.0.36 → rclone_api-1.0.38}/.vscode/tasks.json +0 -0
  18. {rclone_api-1.0.36 → rclone_api-1.0.38}/LICENSE +0 -0
  19. {rclone_api-1.0.36 → rclone_api-1.0.38}/MANIFEST.in +0 -0
  20. {rclone_api-1.0.36 → rclone_api-1.0.38}/README.md +0 -0
  21. {rclone_api-1.0.36 → rclone_api-1.0.38}/clean +0 -0
  22. {rclone_api-1.0.36 → rclone_api-1.0.38}/install +0 -0
  23. {rclone_api-1.0.36 → rclone_api-1.0.38}/lint +0 -0
  24. {rclone_api-1.0.36 → rclone_api-1.0.38}/requirements.testing.txt +0 -0
  25. {rclone_api-1.0.36 → rclone_api-1.0.38}/setup.cfg +0 -0
  26. {rclone_api-1.0.36 → rclone_api-1.0.38}/setup.py +0 -0
  27. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/__init__.py +0 -0
  28. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/assets/example.txt +0 -0
  29. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/cli.py +0 -0
  30. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/cmd/list_files.py +0 -0
  31. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/config.py +0 -0
  32. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/convert.py +0 -0
  33. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/deprecated.py +0 -0
  34. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/dir.py +0 -0
  35. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/dir_listing.py +0 -0
  36. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/exec.py +0 -0
  37. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/file.py +0 -0
  38. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/filelist.py +0 -0
  39. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/process.py +0 -0
  40. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/remote.py +0 -0
  41. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/rpath.py +0 -0
  42. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/util.py +0 -0
  43. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api/walk.py +0 -0
  44. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  45. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api.egg-info/entry_points.txt +0 -0
  46. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api.egg-info/requires.txt +0 -0
  47. {rclone_api-1.0.36 → rclone_api-1.0.38}/src/rclone_api.egg-info/top_level.txt +0 -0
  48. {rclone_api-1.0.36 → rclone_api-1.0.38}/test +0 -0
  49. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_cmd_list_files.py +0 -0
  50. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_copy.py +0 -0
  51. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_diff.py +0 -0
  52. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_is_synced.py +0 -0
  53. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_ls.py +0 -0
  54. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_mount.py +0 -0
  55. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_mount_s3.py +0 -0
  56. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_mount_webdav.py +0 -0
  57. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_obscure.py +0 -0
  58. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_remotes.py +0 -0
  59. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_serve_webdav.py +0 -0
  60. {rclone_api-1.0.36 → rclone_api-1.0.38}/tests/test_walk.py +0 -0
  61. {rclone_api-1.0.36 → rclone_api-1.0.38}/tox.ini +0 -0
  62. {rclone_api-1.0.36 → rclone_api-1.0.38}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.36
3
+ Version: 1.0.38
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  Maintainer: Zachary Vorhies
@@ -15,7 +15,7 @@ dependencies = [
15
15
  "python-dotenv>=1.0.0",
16
16
  ]
17
17
  # Change this with the version number bump.
18
- version = "1.0.36"
18
+ version = "1.0.38"
19
19
 
20
20
  [tool.setuptools]
21
21
  package-dir = {"" = "src"}
@@ -0,0 +1,15 @@
1
+ import subprocess
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class CompletedProcess:
7
+ completed: list[subprocess.CompletedProcess]
8
+
9
+ @property
10
+ def ok(self) -> bool:
11
+ return all([p.returncode == 0 for p in self.completed])
12
+
13
+ @staticmethod
14
+ def from_subprocess(process: subprocess.CompletedProcess) -> "CompletedProcess":
15
+ return CompletedProcess(completed=[process])
@@ -94,7 +94,6 @@ def _async_diff_stream_from_running_process(
94
94
  print("UnicodeDecodeError")
95
95
  continue
96
96
  output.put(None)
97
- print("done")
98
97
  except KeyboardInterrupt:
99
98
  import _thread
100
99
 
@@ -12,6 +12,7 @@ from tempfile import TemporaryDirectory
12
12
  from typing import Generator
13
13
 
14
14
  from rclone_api import Dir
15
+ from rclone_api.completed_process import CompletedProcess
15
16
  from rclone_api.config import Config
16
17
  from rclone_api.convert import convert_to_filestr_list, convert_to_str
17
18
  from rclone_api.deprecated import deprecated
@@ -216,7 +217,7 @@ class Rclone:
216
217
  include_files_txt = Path(tmpdir) / "include_files.txt"
217
218
  include_files_txt.write_text("\n".join(files), encoding="utf-8")
218
219
 
219
- print(include_files_txt)
220
+ # print(include_files_txt)
220
221
  cmd_list: list[str] = [
221
222
  "delete",
222
223
  remote,
@@ -234,7 +235,7 @@ class Rclone:
234
235
 
235
236
  assert out is not None
236
237
 
237
- def copy(self, src: Dir | str, dst: Dir | str) -> subprocess.CompletedProcess:
238
+ def copy(self, src: Dir | str, dst: Dir | str) -> CompletedProcess:
238
239
  """Copy files from source to destination.
239
240
 
240
241
  Args:
@@ -246,37 +247,42 @@ class Rclone:
246
247
  src_dir = convert_to_str(src)
247
248
  dst_dir = convert_to_str(dst)
248
249
  cmd_list: list[str] = ["copy", src_dir, dst_dir]
249
- return self._run(cmd_list)
250
+ cp = self._run(cmd_list)
251
+ return CompletedProcess.from_subprocess(cp)
250
252
 
251
- def purge(self, path: Dir | str) -> subprocess.CompletedProcess:
253
+ def purge(self, path: Dir | str) -> CompletedProcess:
252
254
  """Purge a directory"""
253
255
  # path should always be a string
254
256
  path = path if isinstance(path, str) else str(path.path)
255
257
  cmd_list: list[str] = ["purge", str(path)]
256
- return self._run(cmd_list)
258
+ cp = self._run(cmd_list)
259
+ return CompletedProcess.from_subprocess(cp)
257
260
 
258
261
  def delete_files(
259
- self, files: str | File | list[str] | list[File]
260
- ) -> subprocess.CompletedProcess:
262
+ self, files: str | File | list[str] | list[File], check=True
263
+ ) -> CompletedProcess:
261
264
  """Delete a directory"""
262
265
  payload: list[str] = convert_to_filestr_list(files)
263
266
  if len(payload) == 0:
264
- return subprocess.CompletedProcess(
267
+ cp = subprocess.CompletedProcess(
265
268
  args=["rclone", "delete", "--files-from", "[]"],
266
269
  returncode=0,
267
270
  stdout="",
268
271
  stderr="",
269
272
  )
273
+ return CompletedProcess.from_subprocess(cp)
270
274
 
271
275
  datalists: dict[str, list[str]] = partition_files(payload)
272
276
  out: subprocess.CompletedProcess | None = None
273
277
 
278
+ completed_processes: list[subprocess.CompletedProcess] = []
279
+
274
280
  for remote, files in datalists.items():
275
281
  with TemporaryDirectory() as tmpdir:
276
282
  include_files_txt = Path(tmpdir) / "include_files.txt"
277
283
  include_files_txt.write_text("\n".join(files), encoding="utf-8")
278
284
 
279
- print(include_files_txt)
285
+ # print(include_files_txt)
280
286
  cmd_list: list[str] = [
281
287
  "delete",
282
288
  remote,
@@ -288,18 +294,23 @@ class Rclone:
288
294
  "1000",
289
295
  ]
290
296
  out = self._run(cmd_list)
297
+ completed_processes.append(out)
291
298
  if out.returncode != 0:
292
- print(out)
293
- raise ValueError(f"Error deleting files: {out.stderr}")
299
+ if check:
300
+ completed_processes.append(out)
301
+ raise ValueError(f"Error deleting files: {out}")
302
+ else:
303
+ warnings.warn(f"Error deleting files: {out}")
294
304
 
295
305
  assert out is not None
296
- return out
306
+ return CompletedProcess(completed_processes)
297
307
 
298
308
  @deprecated("delete_files")
299
309
  def deletefiles(
300
310
  self, files: str | File | list[str] | list[File]
301
- ) -> subprocess.CompletedProcess:
302
- return self.delete_files(files)
311
+ ) -> CompletedProcess:
312
+ out = self.delete_files(files)
313
+ return out
303
314
 
304
315
  def exists(self, path: Dir | Remote | str | File) -> bool:
305
316
  """Check if a file or directory exists."""
@@ -325,7 +336,7 @@ class Rclone:
325
336
 
326
337
  def copy_dir(
327
338
  self, src: str | Dir, dst: str | Dir, args: list[str] | None = None
328
- ) -> subprocess.CompletedProcess:
339
+ ) -> CompletedProcess:
329
340
  """Copy a directory from source to destination."""
330
341
  # convert src to str, also dst
331
342
  src = convert_to_str(src)
@@ -333,16 +344,19 @@ class Rclone:
333
344
  cmd_list: list[str] = ["copy", src, dst]
334
345
  if args is not None:
335
346
  cmd_list += args
336
- return self._run(cmd_list)
347
+ cp = self._run(cmd_list)
348
+ return CompletedProcess.from_subprocess(cp)
337
349
 
338
350
  def copy_remote(
339
351
  self, src: Remote, dst: Remote, args: list[str] | None = None
340
- ) -> subprocess.CompletedProcess:
352
+ ) -> CompletedProcess:
341
353
  """Copy a remote to another remote."""
342
354
  cmd_list: list[str] = ["copy", str(src), str(dst)]
343
355
  if args is not None:
344
356
  cmd_list += args
345
- return self._run(cmd_list)
357
+ # return self._run(cmd_list)
358
+ cp = self._run(cmd_list)
359
+ return CompletedProcess.from_subprocess(cp)
346
360
 
347
361
  def mount(
348
362
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.36
3
+ Version: 1.0.38
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  Maintainer: Zachary Vorhies
@@ -22,6 +22,7 @@ upload_package.sh
22
22
  .vscode/tasks.json
23
23
  src/rclone_api/__init__.py
24
24
  src/rclone_api/cli.py
25
+ src/rclone_api/completed_process.py
25
26
  src/rclone_api/config.py
26
27
  src/rclone_api/convert.py
27
28
  src/rclone_api/deprecated.py
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