Skip to content

Commit 3a73346

Browse files
authored
share API adjustments (#206)
Changes proposed in this pull request: * class `Share`: added missing `file_source_id`, `can_edit`, `can_delete` properties. * class `Share`.raw_data marked as deprecated and changed to `_raw_data`. Signed-off-by: Alexander Piskun <[email protected]>
1 parent 0657830 commit 3a73346

File tree

3 files changed

+47
-15
lines changed

3 files changed

+47
-15
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ All notable changes to this project will be documented in this file.
77
### Added
88

99
- NextcloudApp: `AppAPIAuthMiddleware` for easy cover all endpoints. #205
10+
- class `Share`: added missing `file_source_id`, `can_edit`, `can_delete` properties. #206
11+
12+
### Changed
13+
14+
- class `Share`.raw_data marked as deprecated and changed to `_raw_data`. #206
1015

1116
## [0.8.0 - 2024-01-12]
1217

nc_py_api/files/__init__.py

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import datetime
55
import email.utils
66
import enum
7+
import warnings
78

89
from .. import _misc
910

@@ -299,77 +300,100 @@ class Share:
299300
"""Information about Share."""
300301

301302
def __init__(self, raw_data: dict):
302-
self.raw_data = raw_data
303+
self._raw_data = raw_data
304+
305+
def __getattr__(self, name):
306+
if name == "raw_data":
307+
warnings.warn(
308+
f"{name} is deprecated and will be removed in 0.9.0 version.", DeprecationWarning, stacklevel=2
309+
)
310+
return self._raw_data
311+
return getattr(self, name)
303312

304313
@property
305314
def share_id(self) -> int:
306315
"""Unique ID of the share."""
307-
return int(self.raw_data["id"])
316+
return int(self._raw_data["id"])
308317

309318
@property
310319
def share_type(self) -> ShareType:
311320
"""Type of the share."""
312-
return ShareType(int(self.raw_data["share_type"]))
321+
return ShareType(int(self._raw_data["share_type"]))
313322

314323
@property
315324
def share_with(self) -> str:
316325
"""To whom Share was created."""
317-
return self.raw_data["share_with"]
326+
return self._raw_data["share_with"]
318327

319328
@property
320329
def permissions(self) -> FilePermissions:
321330
"""Recipient permissions."""
322-
return FilePermissions(int(self.raw_data["permissions"]))
331+
return FilePermissions(int(self._raw_data["permissions"]))
323332

324333
@property
325334
def url(self) -> str:
326335
"""URL at which Share is avalaible."""
327-
return self.raw_data.get("url", "")
336+
return self._raw_data.get("url", "")
328337

329338
@property
330339
def path(self) -> str:
331340
"""Share path relative to the user's root directory."""
332-
return self.raw_data.get("path", "").lstrip("/")
341+
return self._raw_data.get("path", "").lstrip("/")
333342

334343
@property
335344
def label(self) -> str:
336345
"""Label for the Shared object."""
337-
return self.raw_data.get("label", "")
346+
return self._raw_data.get("label", "")
338347

339348
@property
340349
def note(self) -> str:
341350
"""Note for the Shared object."""
342-
return self.raw_data.get("note", "")
351+
return self._raw_data.get("note", "")
343352

344353
@property
345354
def mimetype(self) -> str:
346355
"""Mimetype of the Shared object."""
347-
return self.raw_data.get("mimetype", "")
356+
return self._raw_data.get("mimetype", "")
348357

349358
@property
350359
def share_owner(self) -> str:
351360
"""Share's creator ID."""
352-
return self.raw_data.get("uid_owner", "")
361+
return self._raw_data.get("uid_owner", "")
353362

354363
@property
355364
def file_owner(self) -> str:
356365
"""File/directory owner ID."""
357-
return self.raw_data.get("uid_file_owner", "")
366+
return self._raw_data.get("uid_file_owner", "")
358367

359368
@property
360369
def password(self) -> str:
361370
"""Password to access share."""
362-
return self.raw_data.get("password", "")
371+
return self._raw_data.get("password", "")
363372

364373
@property
365374
def send_password_by_talk(self) -> bool:
366375
"""Flag indicating was password send by Talk."""
367-
return self.raw_data.get("send_password_by_talk", False)
376+
return self._raw_data.get("send_password_by_talk", False)
368377

369378
@property
370379
def expire_date(self) -> datetime.datetime:
371380
"""Share expiration time."""
372-
return _misc.nc_iso_time_to_datetime(self.raw_data.get("expiration", ""))
381+
return _misc.nc_iso_time_to_datetime(self._raw_data.get("expiration", ""))
382+
383+
@property
384+
def file_source_id(self) -> int:
385+
"""File source ID."""
386+
return self._raw_data.get("file_source", 0)
387+
388+
@property
389+
def can_edit(self) -> bool:
390+
"""Does caller have ``write`` permissions."""
391+
return self._raw_data.get("can_edit", False)
392+
393+
@property
394+
def can_delete(self) -> bool:
395+
"""Does caller have ``delete`` permissions."""
396+
return self._raw_data.get("can_delete", False)
373397

374398
def __str__(self):
375399
return (

tests/actual_tests/files_sharing_test.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ def _test_share_fields(new_share: Share, get_by_id: Share, shared_file: FsNode):
5454
assert get_by_id.share_owner == new_share.share_owner
5555
assert not get_by_id.share_with
5656
assert str(get_by_id) == str(new_share)
57+
assert get_by_id.file_source_id == shared_file.info.fileid
58+
assert get_by_id.can_delete is True
59+
assert get_by_id.can_edit is True
5760

5861

5962
def test_share_fields(nc_any):

0 commit comments

Comments
 (0)