|
1 | 1 | import logging |
2 | 2 |
|
3 | 3 | from .directory import User |
4 | | -from .utils import ApiComponent |
| 4 | +from .utils import ApiComponent, NEXT_LINK_KEYWORD, Pagination |
5 | 5 |
|
6 | 6 | log = logging.getLogger(__name__) |
7 | 7 |
|
@@ -209,32 +209,50 @@ def get_group_by_mail(self, group_mail=None): |
209 | 209 | return self.group_constructor(parent=self, |
210 | 210 | **{self._cloud_data_key: data.get('value')[0]}) |
211 | 211 |
|
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 |
214 | 214 |
|
215 | 215 | :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 |
218 | 220 | """ |
219 | 221 |
|
220 | 222 | if not user_id: |
221 | | - raise RuntimeError('Provide the user_id') |
| 223 | + raise RuntimeError("Provide the user_id") |
222 | 224 |
|
223 | 225 | # get channels by the team id |
224 | 226 | url = self.build_url( |
225 | 227 | self._endpoints.get("get_user_groups").format(user_id=user_id) |
226 | 228 | ) |
227 | 229 |
|
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) |
229 | 235 |
|
230 | 236 | if not response: |
231 | 237 | return None |
232 | 238 |
|
233 | 239 | data = response.json() |
234 | 240 |
|
235 | | - return [ |
| 241 | + groups = [ |
236 | 242 | 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 |
238 | 256 |
|
239 | 257 | def list_groups(self): |
240 | 258 | """Returns list of groups |
|
0 commit comments