Skip to content

Commit 5fa7037

Browse files
committed
Add Orgs Members API
1 parent 8e91d74 commit 5fa7037

File tree

5 files changed

+187
-4
lines changed

5 files changed

+187
-4
lines changed

pygithub3/requests/orgs/members.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.resources.orgs import Member
4+
from . import Request
5+
6+
7+
class List(Request):
8+
uri = 'orgs/{org}/members'
9+
resource = Member
10+
11+
12+
class Get(Request):
13+
uri = 'orgs/{org}/members/{user}'
14+
15+
16+
class Delete(Request):
17+
uri = 'orgs/{org}/members/{user}'
18+
19+
20+
class Listpublic(Request):
21+
uri = 'orgs/{org}/public_members'
22+
resource = Member
23+
24+
25+
class Getpublic(Request):
26+
uri = 'orgs/{org}/public_members/{user}'
27+
28+
29+
class Publicize(Request):
30+
uri = 'orgs/{org}/public_members/{user}'
31+
32+
33+
class Conceal(Request):
34+
uri = 'orgs/{org}/public_members/{user}'

pygithub3/resources/orgs.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@ class Team(Resource):
1818

1919
def __str__(self):
2020
return '<Team (%s)>' % getattr(self, 'name', '')
21+
22+
23+
class Member(Resource):
24+
25+
def __str__(self):
26+
return '<TeamMember (%s)>' % getattr(self, 'login', '')

pygithub3/services/orgs/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
# -*- encoding: utf-8 -*-
22

33
from pygithub3.services.base import Service
4+
from .members import Members
45

56

67
class Org(Service):
78
""" Consume `Orgs API <http://developer.github.com/v3/orgs>`_ """
89

10+
def __init__(self, **config):
11+
self.members = Members(**config)
12+
super(Org, self).__init__(**config)
13+
914
def list(self, user=None):
1015
""" Get user's orgs
1116

pygithub3/services/orgs/members.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from . import Service
4+
5+
6+
class Members(Service):
7+
""" Consume `Members API <http://developer.github.com/v3/orgs/members/>`_
8+
"""
9+
10+
def list(self, org):
11+
""" Get org's members
12+
13+
:param str org: Organisation name
14+
:returns: A :doc:`result`
15+
16+
If you call it authenticated, and are a member of the org, public and
17+
private members will be visible.
18+
19+
If not, only public members will be visible.
20+
"""
21+
request = self.request_builder('orgs.members.list', org=org)
22+
return self._get_result(request)
23+
24+
def is_member(self, org, user):
25+
""" Determine if user is a member of org
26+
27+
:param str org: Organisation name
28+
:param str user: User name
29+
"""
30+
request = self.request_builder('orgs.members.get', org=org, user=user)
31+
return self._bool(request)
32+
33+
def remove_member(self, org, user):
34+
""" Remove user from all teams in org
35+
36+
:param str org: Organisation name
37+
:param str user: User name
38+
39+
.. warning ::
40+
You must be authenticated and an owner of org
41+
42+
"""
43+
request = self.request_builder('orgs.members.get', org=org, user=user)
44+
return self._delete(request)
45+
46+
def list_public(self, org):
47+
""" Get org's public members
48+
49+
:param str org: Organisation name
50+
:returns: A :doc:`result`
51+
"""
52+
request = self.request_builder('orgs.members.listpublic', org=org)
53+
return self._get_result(request)
54+
55+
def is_public_member(self, org, user):
56+
""" Determine if user is a public member of org
57+
58+
:param str org: Organisation name
59+
:param str user: User name
60+
"""
61+
request = self.request_builder('orgs.members.getpublic',
62+
org=org, user=user)
63+
return self._bool(request)
64+
65+
def publicize_membership(self, org, user):
66+
""" Publicize user's membership in org
67+
68+
:param str org: Organisation name
69+
:param str user: User name
70+
71+
.. warning ::
72+
You must be authenticated and the user, or an owner of the org
73+
74+
"""
75+
request = self.request_builder('orgs.members.publicize',
76+
org=org, user=user)
77+
return self._put(request)
78+
79+
def conceal_membership(self, org, user):
80+
""" Conceal user's membership in org
81+
82+
:param str org: Organisation name
83+
:param str user: User name
84+
85+
.. warning ::
86+
You must be authenticated and the user, or an owner of the org
87+
88+
"""
89+
request = self.request_builder('orgs.members.conceal',
90+
org=org, user=user)
91+
return self._delete(request)

pygithub3/tests/services/test_orgs.py

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from pygithub3.tests.utils.core import TestCase
88
from pygithub3.resources.base import json
9-
from pygithub3.services.orgs import Org
9+
from pygithub3.services.orgs import Org, Members
1010
from pygithub3.tests.utils.base import (mock_response, mock_response_result,
1111
mock_json)
1212
from pygithub3.tests.utils.services import _
@@ -17,7 +17,6 @@
1717

1818
@patch.object(requests.sessions.Session, 'request')
1919
class TestOrgService(TestCase):
20-
2120
def setUp(self):
2221
self.org = Org()
2322

@@ -30,7 +29,7 @@ def test_LIST_with_user(self, request_method):
3029
request_method.return_value = mock_response_result()
3130
self.org.list('octocat').all()
3231
self.assertEqual(request_method.call_args[0],
33-
('get', _('users/octocat/orgs')))
32+
('get', _('users/octocat/orgs')))
3433

3534
def test_GET(self, request_method):
3635
request_method.return_value = mock_response()
@@ -41,4 +40,52 @@ def test_UPDATE(self, request_method):
4140
request_method.return_value = mock_response('patch')
4241
self.org.update('acme', {'company': 'ACME Widgets'})
4342
self.assertEqual(request_method.call_args[0],
44-
('patch', _('orgs/acme')))
43+
('patch', _('orgs/acme')))
44+
45+
46+
@patch.object(requests.sessions.Session, 'request')
47+
class TestOrgMemberService(TestCase):
48+
def setUp(self):
49+
self.ms = Members()
50+
51+
def test_LIST(self, request_method):
52+
request_method.return_value = mock_response_result()
53+
self.ms.list('acme').all()
54+
self.assertEqual(request_method.call_args[0],
55+
('get', _('orgs/acme/members')))
56+
57+
def test_IS_MEMBER(self, request_method):
58+
request_method.return_value = mock_response()
59+
self.ms.is_member('acme', 'octocat')
60+
self.assertEqual(request_method.call_args[0],
61+
('head', _('orgs/acme/members/octocat')))
62+
63+
def test_REMOVE_MEMBER(self, request_method):
64+
request_method.return_value = mock_response('delete')
65+
self.ms.remove_member('acme', 'octocat')
66+
self.assertEqual(request_method.call_args[0],
67+
('delete', _('orgs/acme/members/octocat')))
68+
69+
def test_LIST_PUBLIC(self, request_method):
70+
request_method.return_value = mock_response_result()
71+
self.ms.list_public('acme').all()
72+
self.assertEqual(request_method.call_args[0],
73+
('get', _('orgs/acme/public_members')))
74+
75+
def test_IS_PUBLIC_MEMBER(self, request_method):
76+
request_method.return_value = mock_response()
77+
self.ms.is_public_member('acme', 'octocat')
78+
self.assertEqual(request_method.call_args[0],
79+
('head', _('orgs/acme/public_members/octocat')))
80+
81+
def test_PUBLICIZE_MEMBERSHIP(self, request_method):
82+
request_method.return_value = mock_response()
83+
self.ms.publicize_membership('acme', 'octocat')
84+
self.assertEqual(request_method.call_args[0],
85+
('put', _('orgs/acme/public_members/octocat')))
86+
87+
def test_CONCEAL_MEMBERSHIP(self, request_method):
88+
request_method.return_value = mock_response('delete')
89+
self.ms.conceal_membership('acme', 'octocat')
90+
self.assertEqual(request_method.call_args[0],
91+
('delete', _('orgs/acme/public_members/octocat')))

0 commit comments

Comments
 (0)