10000 Add support for filtering team/organization members by role · veziak/github3.py@a5d2375 · GitHub
[go: up one dir, main page]

Skip to content

Commit a5d2375

Browse files
Add support for filtering team/organization members by role
Takes advantage of some of the improved organization permissions https://developer.github.com/changes/2015-06-24-api-enhancements-for-working-with-organization-permissions/
1 parent c04637a commit a5d2375

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

github3/models.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,19 +218,20 @@ def _api(self, uri):
218218
self._uri = urlparse(uri)
219219
self.url = uri
220220

221-
def _iter(self, count, url, cls, params=None, etag=None):
221+
def _iter(self, count, url, cls, params=None, etag=None, headers=None):
222222
"""Generic iterator for this project.
223223
224224
:param int count: How many items to return.
225225
:param int url: First URL to start with
226226
:param class cls: cls to return an object of
227227
:param params dict: (optional) Parameters for the request
228228
:param str etag: (optional), ETag from the last call
229+
:param dict headers: (optional) HTTP Headers for the request
229230
:returns: A lazy iterator over the pagianted resource
230231
:rtype: :class:`GitHubIterator <github3.structs.GitHubIterator>`
231232
"""
232233
from .structs import GitHubIterator
233-
return GitHubIterator(count, url, cls, self, params, etag)
234+
return GitHubIterator(count, url, cls, self, params, etag, headers)
234235

235236
@property
236237
def ratelimit_remaining(self):

github3/orgs.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,17 +143,25 @@ def is_member(self, username):
143143
return self._boolean(self._get(url), 204, 404)
144144

145145
@requires_auth
146-
def members(self, number=-1, etag=None):
146+
def members(self, role=None, number=-1, etag=None):
147147
r"""Iterate over the members of this team.
148148
149+
:param str role: (optional), filter members returned by their role
150+
in the team. Can be one of: ``"member"``, ``"maintainer"``,
151+
``"all"``. Default: ``"all"``.
149152
:param int number: (optional), number of users to iterate over.
150153
Default: -1 iterates over all values
151154
:param str etag: (optional), ETag from a previous request to the same
152155
endpoint
153156
:returns: generator of :class:`User <github3.users.User>`\ s
154157
"""
158+
headers = {}
159+
params = {}
160+
if role in set(["member", "maintainer", "all"]):
161+
params['role'] = role
162+
headers['Accept'] = 'application/vnd.github.ironman-preview+json'
155163
url = self._build_url('members', base_url=self._api)
156-
return self._iter(int(number), url, User, etag=etag)
164+
return self._iter(int(number), url, User, etag=etag, headers=headers)
157165

158166
@requires_auth
159167
def repositories(self, number=-1, etag=None):
@@ -444,24 +452,32 @@ def events(self, number=-1, etag=None):
444452
url = self._build_url('events', base_url=self._api)
445453
return self._iter(int(number), url, Event, etag=etag)
446454

447-
def members(self, filter=None, number=-1, etag=None):
455+
def members(self, filter=None, role=None, number=-1, etag=None):
448456
r"""Iterate over members of this organization.
449457
450458
:param str filter: (optional), filter members returned by this method.
451459
Can be one of: ``"2fa_disabled"``, ``"all",``. Default: ``"all"``.
452460
Filtering by ``"2fa_disabled"`` is only available for organization
453461
owners with private repositories.
462+
:param str role: (optional), filter members returned by their role.
463+
Can be one of: ``"all"``, ``"admin"``, ``"member"``. Default:
464+
``"all"``.
454465
:param int number: (optional), number of members to return. Default:
455466
-1 will return all available.
456467
:param str etag: (optional), ETag from a previous request to the same
457468
endpoint
458469
:returns: generator of :class:`User <github3.users.User>`\ s
459470
"""
471+
headers = {}
460472
params = {}
461473
if filter in set(["2fa_disabled", "all"]):
462474
params['filter'] = filter
475+
if role in set(["all", "admin", "member"]):
476+
params['role'] = role
477+
headers['Accept'] = 'application/vnd.github.ironman-preview+json'
463478
url = self._build_url('members', base_url=self._api)
464-
return self._iter(int(number), url, User, params=params, etag=etag)
479+
return self._iter(int(number), url, User, params=params, etag=etag,
480+
headers=headers)
465481

466482
def public_members(self, number=-1, etag=None):
467483
r"""Iterate over public members of this organization.

0 commit comments

Comments
 (0)
0