rclone-api 1.0.77__tar.gz → 1.0.78__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. {rclone_api-1.0.77 → rclone_api-1.0.78}/PKG-INFO +1 -1
  2. {rclone_api-1.0.77 → rclone_api-1.0.78}/pyproject.toml +1 -1
  3. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/__init__.py +1 -2
  4. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/dir_listing.py +10 -0
  5. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/file.py +7 -0
  6. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/group_files.py +3 -0
  7. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/rclone.py +15 -8
  8. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/types.py +4 -3
  9. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api.egg-info/PKG-INFO +1 -1
  10. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_size_files.py +5 -4
  11. {rclone_api-1.0.77 → rclone_api-1.0.78}/.aiderignore +0 -0
  12. {rclone_api-1.0.77 → rclone_api-1.0.78}/.github/workflows/lint.yml +0 -0
  13. {rclone_api-1.0.77 → rclone_api-1.0.78}/.github/workflows/push_macos.yml +0 -0
  14. {rclone_api-1.0.77 → rclone_api-1.0.78}/.github/workflows/push_ubuntu.yml +0 -0
  15. {rclone_api-1.0.77 → rclone_api-1.0.78}/.github/workflows/push_win.yml +0 -0
  16. {rclone_api-1.0.77 → rclone_api-1.0.78}/.gitignore +0 -0
  17. {rclone_api-1.0.77 → rclone_api-1.0.78}/.pylintrc +0 -0
  18. {rclone_api-1.0.77 → rclone_api-1.0.78}/.vscode/launch.json +0 -0
  19. {rclone_api-1.0.77 → rclone_api-1.0.78}/.vscode/settings.json +0 -0
  20. {rclone_api-1.0.77 → rclone_api-1.0.78}/.vscode/tasks.json +0 -0
  21. {rclone_api-1.0.77 → rclone_api-1.0.78}/LICENSE +0 -0
  22. {rclone_api-1.0.77 → rclone_api-1.0.78}/MANIFEST.in +0 -0
  23. {rclone_api-1.0.77 → rclone_api-1.0.78}/README.md +0 -0
  24. {rclone_api-1.0.77 → rclone_api-1.0.78}/clean +0 -0
  25. {rclone_api-1.0.77 → rclone_api-1.0.78}/install +0 -0
  26. {rclone_api-1.0.77 → rclone_api-1.0.78}/lint +0 -0
  27. {rclone_api-1.0.77 → rclone_api-1.0.78}/requirements.testing.txt +0 -0
  28. {rclone_api-1.0.77 → rclone_api-1.0.78}/setup.cfg +0 -0
  29. {rclone_api-1.0.77 → rclone_api-1.0.78}/setup.py +0 -0
  30. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/assets/example.txt +0 -0
  31. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/cli.py +0 -0
  32. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/cmd/list_files.py +0 -0
  33. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/completed_process.py +0 -0
  34. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/config.py +0 -0
  35. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/convert.py +0 -0
  36. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/deprecated.py +0 -0
  37. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/diff.py +0 -0
  38. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/dir.py +0 -0
  39. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/exec.py +0 -0
  40. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/filelist.py +0 -0
  41. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/process.py +0 -0
  42. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/remote.py +0 -0
  43. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/rpath.py +0 -0
  44. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/scan_missing_folders.py +0 -0
  45. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/util.py +0 -0
  46. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api/walk.py +0 -0
  47. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api.egg-info/SOURCES.txt +0 -0
  48. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api.egg-info/dependency_links.txt +0 -0
  49. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api.egg-info/entry_points.txt +0 -0
  50. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api.egg-info/requires.txt +0 -0
  51. {rclone_api-1.0.77 → rclone_api-1.0.78}/src/rclone_api.egg-info/top_level.txt +0 -0
  52. {rclone_api-1.0.77 → rclone_api-1.0.78}/test +0 -0
  53. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_cmd_list_files.py +0 -0
  54. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_copy.py +0 -0
  55. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_copy_files.py +0 -0
  56. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_diff.py +0 -0
  57. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_group_files.py +0 -0
  58. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_is_synced.py +0 -0
  59. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_ls.py +0 -0
  60. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_mount.py +0 -0
  61. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_mount_s3.py +0 -0
  62. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_mount_webdav.py +0 -0
  63. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_obscure.py +0 -0
  64. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_remote_control.py +0 -0
  65. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_remotes.py +0 -0
  66. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_scan_missing_folders.py +0 -0
  67. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_serve_webdav.py +0 -0
  68. {rclone_api-1.0.77 → rclone_api-1.0.78}/tests/test_walk.py +0 -0
  69. {rclone_api-1.0.77 → rclone_api-1.0.78}/tox.ini +0 -0
  70. {rclone_api-1.0.77 → rclone_api-1.0.78}/upload_package.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.77
3
+ Version: 1.0.78
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.77"
18
+ version = "1.0.78"
19
19
 
20
20
  [tool.setuptools]
21
21
  package-dir = {"" = "src"}
@@ -9,7 +9,7 @@ from .process import Process
9
9
  from .rclone import Rclone, rclone_verbose
10
10
  from .remote import Remote
11
11
  from .rpath import RPath
12
- from .types import GroupingOption, ListingOption, Order, SizeResult
12
+ from .types import ListingOption, Order, SizeResult
13
13
 
14
14
  __all__ = [
15
15
  "Rclone",
@@ -29,6 +29,5 @@ __all__ = [
29
29
  "ListingOption",
30
30
  "Order",
31
31
  "ListingOption",
32
- "GroupingOption",
33
32
  "SizeResult",
34
33
  ]
@@ -29,6 +29,16 @@ class DirListing:
29
29
  self.dirs: list[Dir] = [Dir(d) for d in dirs_and_files if d.is_dir]
30
30
  self.files: list[File] = [File(f) for f in dirs_and_files if not f.is_dir]
31
31
 
32
+ def files_relative(self, prefix: str) -> list[str]:
33
+ """Return a list of file paths relative to the root directory."""
34
+ from rclone_api.file import File
35
+
36
+ out: list[str] = []
37
+ f: File
38
+ for f in self.files:
39
+ out.append(f.relative_to(prefix))
40
+ return out
41
+
32
42
  def __str__(self) -> str:
33
43
  n_files = len(self.files)
34
44
  n_dirs = len(self.dirs)
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from pathlib import Path
2
3
 
3
4
  from rclone_api.rpath import RPath
4
5
 
@@ -47,6 +48,12 @@ class File:
47
48
  return f"{remote.name}:{rest}"
48
49
  return rest
49
50
 
51
+ def relative_to(self, prefix: str) -> str:
52
+ """Return the relative path to the other directory."""
53
+ self_path = Path(str(self))
54
+ rel_path = self_path.relative_to(prefix)
55
+ return str(rel_path.as_posix())
56
+
50
57
  @property
51
58
  def size(self) -> int:
52
59
  """Get the size of the file."""
@@ -182,6 +182,9 @@ def group_under_remote(
182
182
  files: list[str], fully_qualified: bool = True
183
183
  ) -> dict[str, list[str]]:
184
184
  """split between filename and remote"""
185
+
186
+ #### DOE STHIS NEED TO BE REMOVEDD????? #####
187
+
185
188
  assert fully_qualified is True, "Not implemented for fully_qualified=False"
186
189
  out: dict[str, list[str]] = {}
187
190
  for file in files:
@@ -24,14 +24,12 @@ from rclone_api.exec import RcloneExec
24
24
  from rclone_api.file import File
25
25
  from rclone_api.group_files import (
26
26
  group_files,
27
- group_under_remote,
28
27
  group_under_remote_bucket,
29
28
  )
30
29
  from rclone_api.process import Process
31
30
  from rclone_api.remote import Remote
32
31
  from rclone_api.rpath import RPath
33
32
  from rclone_api.types import (
34
- GroupingOption,
35
33
  ListingOption,
36
34
  ModTimeStrategy,
37
35
  Order,
@@ -840,21 +838,22 @@ class Rclone:
840
838
 
841
839
  def size_files(
842
840
  self,
841
+ src: str,
843
842
  files: list[str],
844
843
  fast_list: bool = True,
845
844
  other_args: list[str] | None = None,
846
- grouping: GroupingOption = GroupingOption.BUCKET,
847
845
  check: bool | None = False,
848
846
  verbose: bool | None = None,
849
847
  ) -> SizeResult:
850
848
  """Get the size of a list of files. Example of files items: "remote:bucket/to/file"."""
851
849
  verbose = get_verbose(verbose)
852
850
  check = get_check(check)
851
+ files = list(files)
852
+ prefix = src if src.endswith(":") else f"{src}/"
853
+ if src:
854
+ files = [f"{prefix}{f}" for f in files]
853
855
  file_list: dict[str, list[str]]
854
- if grouping == GroupingOption.BUCKET:
855
- file_list = group_under_remote_bucket(files)
856
- elif grouping == GroupingOption.REMOTE:
857
- file_list = group_under_remote(files)
856
+ file_list = group_under_remote_bucket(files)
858
857
  all_files: list[File] = []
859
858
  for src_path, files in file_list.items():
860
859
  cmd = ["lsjson", src_path, "--files-only", "-R"]
@@ -900,5 +899,13 @@ class Rclone:
900
899
  warnings.warn(f"File size is 0: {p}")
901
900
  file_sizes[p] = f.size
902
901
  total_size = sum(file_sizes.values())
903
- out: SizeResult = SizeResult(total_size=total_size, file_sizes=file_sizes)
902
+ file_sizes_path_corrected: dict[str, int] = {}
903
+ for path, size in file_sizes.items():
904
+ # remove the prefix
905
+ path_path = Path(path)
906
+ path_str = path_path.relative_to(prefix).as_posix()
907
+ file_sizes_path_corrected[path_str] = size
908
+ out: SizeResult = SizeResult(
909
+ prefix=prefix, total_size=total_size, file_sizes=file_sizes_path_corrected
910
+ )
904
911
  return out
@@ -19,14 +19,15 @@ class Order(Enum):
19
19
  RANDOM = "random"
20
20
 
21
21
 
22
- class GroupingOption(Enum):
23
- BUCKET = "bucket"
24
- REMOTE = "remote"
22
+ # class GroupingOption(Enum):
23
+ # BUCKET = "bucket"
24
+ # REMOTE = "remote"
25
25
 
26
26
 
27
27
  @dataclass
28
28
  class SizeResult:
29
29
  """Size result dataclass."""
30
30
 
31
+ prefix: str
31
32
  total_size: int
32
33
  file_sizes: dict[str, int]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rclone_api
3
- Version: 1.0.77
3
+ Version: 1.0.78
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  Maintainer: Zachary Vorhies
@@ -61,7 +61,8 @@ class RcloneSizeFilesTester(unittest.TestCase):
61
61
  dirlisting: DirListing
62
62
  is_first = True
63
63
  files: list[str] = []
64
- for dirlisting in rclone.walk(f"dst:{BUCKET_NAME}", max_depth=1):
64
+ src = f"dst:{BUCKET_NAME}"
65
+ for dirlisting in rclone.walk(src, max_depth=1):
65
66
  if is_first:
66
67
  # assert just one file
67
68
  # assert len(dirlisting.files) == 1
@@ -70,12 +71,12 @@ class RcloneSizeFilesTester(unittest.TestCase):
70
71
  self.assertEqual(dirlisting.files[0].name, "first.txt")
71
72
  is_first = False
72
73
  # print(dirlisting)
73
- for file in dirlisting.files:
74
- files.append(str(file))
74
+ for file in dirlisting.files_relative(src):
75
+ files.append(file)
75
76
 
76
77
  # print(files)
77
78
 
78
- size_map: SizeResult = rclone.size_files(files, check=True)
79
+ size_map: SizeResult = rclone.size_files(src=src, files=files, check=True)
79
80
  print(size_map)
80
81
  print("done")
81
82
 
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