Menu

pycaravel: This module is designed to simplify continuous integration (CI) of data from multiple projects.

Source code for caravel.nextcloud.api_wrappers.share

from ..base import ShareType, WithRequester


[docs] class Share(WithRequester): API_URL = "/ocs/v2.php/apps/files_sharing/api/v1" LOCAL = "shares" SUCCESS_CODE = 200 def get_local_url(self, additional_url=""): if additional_url: return f"{self.LOCAL}/{additional_url}" return self.LOCAL
[docs] @staticmethod def validate_share_parameters(path, share_type, share_with): """ Check if share parameters make sense. """ return ( path is not None and isinstance(share_type, int) and (share_with is not None or share_type not in { ShareType.GROUP, ShareType.USER, ShareType.FEDERATED_CLOUD_SHARE, ShareType.CIRCLE }) )
[docs] def get_shares(self): """ Get all shares from the user. """ return self.requester.get(self.get_local_url())
[docs] def get_shares_from_path(self, path, reshares=None, subfiles=None): """ Get all shares from a given file/folder. """ url = self.get_local_url() params = { "path": path, # TODO: test reshares, subfiles "reshares": ( None if reshares is None else str(bool(reshares)).lower()), "subfiles": ( None if subfiles is None else str(bool(subfiles)).lower()), } return self.requester.get(url, params=params)
[docs] def get_share_info(self, sid): """ Get information about a given share. """ return self.requester.get(self.get_local_url(sid))
[docs] def create_share( self, path, share_type, share_with=None, public_upload=None, password=None, permissions=None): """ Share a file/folder with a user/group or as public link. Mandatory fields: share_type, path and share_with for share_type USER (0) or GROUP (1). """ if not self.validate_share_parameters(path, share_type, share_with): raise ValueError("Unexpected input parameters.") url = self.get_local_url() if public_upload: public_upload = "true" data = {"path": path, "shareType": share_type} if share_type in [ShareType.GROUP, ShareType.USER, ShareType.FEDERATED_CLOUD_SHARE]: data["shareWith"] = share_with if public_upload: data["publicUpload"] = public_upload if share_type == ShareType.PUBLIC_LINK and password is not None: data["password"] = str(password) if permissions is not None: data["permissions"] = permissions return self.requester.post(url, data)
[docs] def delete_share(self, sid): """ Remove the given share. """ return self.requester.delete(self.get_local_url(sid))
[docs] def update_share(self, sid, permissions=None, password=None, public_upload=None, expire_date=""): """ Update a given share, only one value can be updated per request. """ if permissions is not None: permissions = int(permissions) params = { "permissions": permissions, "password": password, "expireDate": expire_date } if public_upload: params["publicUpload"] = "true" if public_upload is False: params["publicUpload"] = "false" # check if only one param specified specified_params_count = sum( int(bool(each)) for each in params.values()) if specified_params_count > 1: raise ValueError("Only one parameter for update can be specified " "per request") url = self.get_local_url(sid) return self.requester.put(url, data=params)

Follow us

© 2025, Antoine Grigis