1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
"""Nextcloud API for working with user groups."""
import dataclasses
from ._misc import kwargs_to_params
from ._session import AsyncNcSessionBasic, NcSessionBasic
@dataclasses.dataclass
class GroupDetails:
"""User Group information."""
def __init__(self, raw_data: dict):
self._raw_data = raw_data
@property
def group_id(self) -> str:
"""ID of the group."""
return self._raw_data["id"]
@property
def display_name(self) -> str:
"""A display name of the group."""
return self._raw_data["displayname"]
@property
def user_count(self) -> int:
"""Number of users in the group."""
return self._raw_data["usercount"]
@property
def disabled(self) -> bool:
"""Flag indicating is group disabled."""
return bool(self._raw_data["disabled"])
@property
def can_add(self) -> bool:
"""Flag indicating the caller has enough rights to add users to this group."""
return bool(self._raw_data["canAdd"])
@property
def can_remove(self) -> bool:
"""Flag indicating the caller has enough rights to remove users from this group."""
return bool(self._raw_data["canRemove"])
def __repr__(self):
return f"<{self.__class__.__name__} id={self.group_id}, user_count={self.user_count}, disabled={self.disabled}>"
class _UsersGroupsAPI:
"""Class providing an API for managing user groups on the Nextcloud server.
.. note:: In NextcloudApp mode, only ``get_list`` and ``get_details`` methods are available.
"""
_ep_base: str = "/ocs/v1.php/cloud/groups"
def __init__(self, session: NcSessionBasic):
self._session = session
def get_list(self, mask: str | None = None, limit: int | None = None, offset: int | None = None) -> list[str]:
"""Returns a list of user groups IDs."""
data = kwargs_to_params(["search", "limit", "offset"], search=mask, limit=limit, offset=offset)
response_data = self._session.ocs("GET", self._ep_base, params=data)
return response_data["groups"] if response_data else []
def get_details(
self, mask: str | None = None, limit: int | None = None, offset: int | None = None
) -> list[GroupDetails]:
"""Returns a list of user groups with detailed information."""
data = kwargs_to_params(["search", "limit", "offset"], search=mask, limit=limit, offset=offset)
response_data = self._session.ocs("GET", f"{self._ep_base}/details", params=data)
return [GroupDetails(i) for i in response_data["groups"]] if response_data else []
def create(self, group_id: str, display_name: str | None = None) -> None:
"""Creates the users group."""
params = {"groupid": group_id}
if display_name is not None:
params["displayname"] = display_name
self._session.ocs("POST", f"{self._ep_base}", params=params)
def edit(self, group_id: str, display_name: str) -> None:
"""Edits users group information."""
params = {"key": "displayname", "value": display_name}
self._session.ocs("PUT", f"{self._ep_base}/{group_id}", params=params)
def delete(self, group_id: str) -> None:
"""Removes the users group."""
self._session.ocs("DELETE", f"{self._ep_base}/{group_id}")
def get_members(self, group_id: str) -> list[str]:
"""Returns a list of group users."""
response_data = self._session.ocs("GET", f"{self._ep_base}/{group_id}")
return response_data["users"] if response_data else {}
def get_subadmins(self, group_id: str) -> list[str]:
"""Returns list of users who is subadmins of the group."""
return self._session.ocs("GET", f"{self._ep_base}/{group_id}/subadmins")
class _AsyncUsersGroupsAPI:
"""Class provides an async API for managing user groups on the Nextcloud server.
.. note:: In NextcloudApp mode, only ``get_list`` and ``get_details`` methods are available.
"""
_ep_base: str = "/ocs/v1.php/cloud/groups"
def __init__(self, session: AsyncNcSessionBasic):
self._session = session
async def get_list(self, mask: str | None = None, limit: int | None = None, offset: int | None = None) -> list[str]:
"""Returns a list of user groups IDs."""
data = kwargs_to_params(["search", "limit", "offset"], search=mask, limit=limit, offset=offset)
response_data = await self._session.ocs("GET", self._ep_base, params=data)
return response_data["groups"] if response_data else []
async def get_details(
self, mask: str | None = None, limit: int | None = None, offset: int | None = None
) -> list[GroupDetails]:
"""Returns a list of user groups with detailed information."""
data = kwargs_to_params(["search", "limit", "offset"], search=mask, limit=limit, offset=offset)
response_data = await self._session.ocs("GET", f"{self._ep_base}/details", params=data)
return [GroupDetails(i) for i in response_data["groups"]] if response_data else []
async def create(self, group_id: str, display_name: str | None = None) -> None:
"""Creates the users group."""
params = {"groupid": group_id}
if display_name is not None:
params["displayname"] = display_name
await self._session.ocs("POST", f"{self._ep_base}", params=params)
async def edit(self, group_id: str, display_name: str) -> None:
"""Edits users group information."""
params = {"key": "displayname", "value": display_name}
await self._session.ocs("PUT", f"{self._ep_base}/{group_id}", params=params)
async def delete(self, group_id: str) -> None:
"""Removes the users group."""
await self._session.ocs("DELETE", f"{self._ep_base}/{group_id}")
async def get_members(self, group_id: str) -> list[str]:
"""Returns a list of group users."""
response_data = await self._session.ocs("GET", f"{self._ep_base}/{group_id}")
return response_data["users"] if response_data else {}
async def get_subadmins(self, group_id: str) -> list[str]:
"""Returns list of users who is subadmins of the group."""
return await self._session.ocs("GET", f"{self._ep_base}/{group_id}/subadmins")
|