Skip to content

Commit 4c538de

Browse files
authored
Merge pull request #1158 from RogerSelwyn/issue_1091
Add pagination for get_user_groups
2 parents c1261ad + d2827e6 commit 4c538de

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

O365/groups.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22

33
from .directory import User
4-
from .utils import ApiComponent
4+
from .utils import ApiComponent, NEXT_LINK_KEYWORD, Pagination
55

66
log = logging.getLogger(__name__)
77

@@ -209,32 +209,50 @@ def get_group_by_mail(self, group_mail=None):
209209
return self.group_constructor(parent=self,
210210
**{self._cloud_data_key: data.get('value')[0]})
211211

212-
def get_user_groups(self, user_id = None):
213-
""" Returns list of groups that given user has membership
212+
def get_user_groups(self, user_id=None, limit=None, batch=None):
213+
"""Returns list of groups that given user has membership
214214
215215
:param user_id: user_id
216-
217-
:rtype: list[Group]
216+
:param int limit: max no. of groups to get. Over 999 uses batch.
217+
:param int batch: batch size, retrieves items in
218+
batches allowing to retrieve more items than the limit.
219+
:rtype: list[Group] or Pagination
218220
"""
219221

220222
if not user_id:
221-
raise RuntimeError('Provide the user_id')
223+
raise RuntimeError("Provide the user_id")
222224

223225
# get channels by the team id
224226
url = self.build_url(
225227
self._endpoints.get("get_user_groups").format(user_id=user_id)
226228
)
227229

228-
response = self.con.get(url)
230+
params = {}
231+
if limit is None or limit > self.protocol.max_top_value:
232+
batch = self.protocol.max_top_value
233+
params["$top"] = batch if batch else limit
234+
response = self.con.get(url, params=params or None)
229235

230236
if not response:
231237
return None
232238

233239
data = response.json()
234240

235-
return [
241+
groups = [
236242
self.group_constructor(parent=self, **{self._cloud_data_key: group})
237-
for group in data.get('value', [])]
243+
for group in data.get("value", [])
244+
]
245+
next_link = data.get(NEXT_LINK_KEYWORD, None)
246+
if batch and next_link:
247+
return Pagination(
248+
parent=self,
249+
data=groups,
250+
constructor=self.group_constructor,
251+
next_link=next_link,
252+
limit=limit,
253+
)
254+
255+
return groups
238256

239257
def list_groups(self):
240258
"""Returns list of groups

0 commit comments

Comments
 (0)