rclone-api 1.5.25__py3-none-any.whl → 1.5.28__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.
rclone_api/__init__.py CHANGED
@@ -24,7 +24,7 @@ from .dir_listing import DirListing # Directory contents representation
24
24
  from .file import File, FileItem # File representation
25
25
  from .file_stream import FilesStream # Streaming file listings
26
26
  from .filelist import FileList # File list utilities
27
- from .fs import FSPath, RemoteFS # Filesystem utilities
27
+ from .fs import FSPath, RealFS, RemoteFS # Filesystem utilities
28
28
  from .http_server import HttpFetcher, HttpServer, Range # HTTP serving capabilities
29
29
 
30
30
  # Import logging configuration utilities
@@ -972,4 +972,8 @@ __all__ = [
972
972
  "Range", # HTTP range
973
973
  "HttpFetcher", # HTTP fetcher
974
974
  "PartInfo", # Part information for uploads
975
+ "RealFS", # Real filesystem
976
+ "RemoteFS", # Remote filesystem
977
+ "FSPath", # File object backed by a real or remote filesystem
978
+ "FilesStream",
975
979
  ]
rclone_api/fs.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import abc
2
2
  import shutil
3
+ import warnings
3
4
  from pathlib import Path
4
5
 
5
6
  from rclone_api.config import Config
@@ -41,6 +42,10 @@ class FS(abc.ABC):
41
42
  def get_path(self, path: str) -> "FSPath":
42
43
  pass
43
44
 
45
+ @abc.abstractmethod
46
+ def dispose(self) -> None:
47
+ pass
48
+
44
49
 
45
50
  class RealFS(FS):
46
51
 
@@ -78,6 +83,9 @@ class RealFS(FS):
78
83
  def get_path(self, path: str) -> "FSPath":
79
84
  return FSPath(self, path)
80
85
 
86
+ def dispose(self) -> None:
87
+ pass
88
+
81
89
 
82
90
  class RemoteFS(FS):
83
91
 
@@ -180,8 +188,15 @@ class RemoteFS(FS):
180
188
 
181
189
  class FSPath:
182
190
  def __init__(self, fs: FS, path: str) -> None:
183
- self.fs = fs
184
- self.path = path
191
+ self.fs: FS = fs
192
+ self.path: str = path
193
+ self.fs_holder: FS | None = None
194
+
195
+ def set_owner(self) -> None:
196
+ self.fs_holder = self.fs
197
+
198
+ def is_real_fs(self) -> bool:
199
+ return isinstance(self.fs, RealFS)
185
200
 
186
201
  def read_text(self) -> str:
187
202
  data = self.read_bytes()
@@ -204,6 +219,16 @@ class FSPath:
204
219
  def __repr__(self) -> str:
205
220
  return f"FSPath({self.path})"
206
221
 
222
+ def __enter__(self) -> "FSPath":
223
+ if self.fs_holder is not None:
224
+ warnings.warn("This operation is reserved for the cwd returned by FS")
225
+ return self
226
+
227
+ def __exit__(self, exc_type, exc_value, traceback) -> None:
228
+ if self.fs_holder is not None:
229
+ self.fs_holder.dispose()
230
+ self.fs_holder = None
231
+
207
232
  def mkdir(self, parents=True, exist_ok=True) -> None:
208
233
  self.fs.mkdir(self.path, parents=parents, exist_ok=exist_ok)
209
234
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rclone_api
3
- Version: 1.5.25
3
+ Version: 1.5.28
4
4
  Summary: rclone api in python
5
5
  Home-page: https://github.com/zackees/rclone-api
6
6
  License: BSD 3-Clause License
@@ -1,4 +1,4 @@
1
- rclone_api/__init__.py,sha256=2B3NUnmPmEfV3f6hLKqMxioJIIB4Ry7jxpPjvA1JxLo,33064
1
+ rclone_api/__init__.py,sha256=1bmwlfdExJS7wFFWJyaS8GFhxbBUDfKhCGYD-h_6pgk,33232
2
2
  rclone_api/cli.py,sha256=dibfAZIh0kXWsBbfp3onKLjyZXo54mTzDjUdzJlDlWo,231
3
3
  rclone_api/completed_process.py,sha256=_IZ8IWK7DM1_tsbDEkH6wPZ-bbcrgf7A7smls854pmg,1775
4
4
  rclone_api/config.py,sha256=f6jEAxVorGFr31oHfcsu5AJTtOJj2wR5tTSsbGGZuIw,2558
@@ -13,7 +13,7 @@ rclone_api/file_item.py,sha256=cH-AQYsxedhNPp4c8NHY1ad4Z7St4yf_VGbmiGD59no,1770
13
13
  rclone_api/file_part.py,sha256=i6ByS5_sae8Eba-4imBVTxd-xKC8ExWy7NR8QGr0ors,6155
14
14
  rclone_api/file_stream.py,sha256=_W3qnwCuigqA0hzXl2q5pAxSZDRaUSwet4BkT0lpnzs,1431
15
15
  rclone_api/filelist.py,sha256=xbiusvNgaB_b_kQOZoHMJJxn6TWGtPrWd2J042BI28o,767
16
- rclone_api/fs.py,sha256=judqhucGuhlsqUCoxa0cELZ-cjVDymlJirrjPzIrJ84,7219
16
+ rclone_api/fs.py,sha256=T08YXyHgxyWbjK09hNAIhchLyWtA1LLU5o1rJe6zvcE,7899
17
17
  rclone_api/group_files.py,sha256=H92xPW9lQnbNw5KbtZCl00bD6iRh9yRbCuxku4j_3dg,8036
18
18
  rclone_api/http_server.py,sha256=ZdL-rGaq0zIjcaIiRIbPBQ4OIWZ7dCu71aq0nRlKtY4,11686
19
19
  rclone_api/install.py,sha256=Xb1BRn8rQcSpSd4dzmvIOELP2zM2DytUeIZ6jzv738A,2893
@@ -54,9 +54,9 @@ rclone_api/s3/multipart/upload_parts_inline.py,sha256=V7syKjFyVIe4U9Ahl5XgqVTzt9
54
54
  rclone_api/s3/multipart/upload_parts_resumable.py,sha256=6-nlMclS8jyVvMvFbQDcZOX9MY1WbCcKA_s9bwuYxnk,9793
55
55
  rclone_api/s3/multipart/upload_parts_server_side_merge.py,sha256=Fp2pdrs5dONQI9LkfNolgAGj1-Z2V1SsRd0r0sreuXI,18040
56
56
  rclone_api/s3/multipart/upload_state.py,sha256=f-Aq2NqtAaMUMhYitlICSNIxCKurWAl2gDEUVizLIqw,6019
57
- rclone_api-1.5.25.dist-info/licenses/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
58
- rclone_api-1.5.25.dist-info/METADATA,sha256=VWQEhDMCtvkYAf_Ts_fiVaTKuy-KRD8k7R9zoVpQqww,37155
59
- rclone_api-1.5.25.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
60
- rclone_api-1.5.25.dist-info/entry_points.txt,sha256=fJteOlYVwgX3UbNuL9jJ0zUTuX2O79JFAeNgK7Sw7EQ,255
61
- rclone_api-1.5.25.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
62
- rclone_api-1.5.25.dist-info/RECORD,,
57
+ rclone_api-1.5.28.dist-info/licenses/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
58
+ rclone_api-1.5.28.dist-info/METADATA,sha256=RsDZv4SyyPBilnMykL9Yywt0p9ORIYHoqqUporH1V2c,37155
59
+ rclone_api-1.5.28.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
60
+ rclone_api-1.5.28.dist-info/entry_points.txt,sha256=fJteOlYVwgX3UbNuL9jJ0zUTuX2O79JFAeNgK7Sw7EQ,255
61
+ rclone_api-1.5.28.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
62
+ rclone_api-1.5.28.dist-info/RECORD,,