Skip to content

Commit c7c0310

Browse files
committed
Baseline Orgs API implementation
1 parent 6dfa63b commit c7c0310

File tree

5 files changed

+132
-1
lines changed

5 files changed

+132
-1
lines changed

pygithub3/github.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ def __init__(self, **config):
1717
from pygithub3.services.users import User
1818
from pygithub3.services.repos import Repo
1919
from pygithub3.services.gists import Gist
20+
from pygithub3.services.orgs import Org
2021
self._users = User(**config)
2122
self._repos = Repo(**config)
2223
self._gists = Gist(**config)
24+
self._orgs = Org(**config)
2325

2426
@property
2527
def remaining_requests(self):
@@ -47,3 +49,10 @@ def gists(self):
4749
:ref:`Gists service <Gists service>`
4850
"""
4951
return self._gists
52+
53+
@property
54+
def orgs(self):
55+
"""
56+
:ref:`Orgs service <Orgs service>`
57+
"""
58+
return self._orgs
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request
4+
from pygithub3.resources.orgs import Org
5+
6+
7+
class List(Request):
8+
uri = 'users/{user}/orgs'
9+
resource = Org
10+
11+
def clean_uri(self):
12+
if not self.user:
13+
return 'user/orgs'
14+
15+
16+
class Get(Request):
17+
uri = 'orgs/{name}'
18+
resource = Org
19+
20+
21+
class Update(Request):
22+
uri = 'orgs/{name}'
23+
resource = Org
24+
body_schema = {
25+
'schema': ('billing_email', 'company', 'email', 'location', 'name'),
26+
'required': (),
27+
}

pygithub3/resources/orgs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ class Org(Resource):
1111
_dates = ('created_at', )
1212

1313
def __str__(self):
14-
return '<Org (%s)>' % getattr(self, 'name', '')
14+
return '<Org (%s)>' % getattr(self, 'login', '')
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.services.base import Service
4+
5+
6+
class Org(Service):
7+
""" Consume `Orgs API <http://developer.github.com/v3/orgs>`_ """
8+
9+
def list(self, user=None):
10+
""" Get user's orgs
11+
12+
:param str user: Username
13+
:returns: A :doc:`result`
14+
15+
If you call it without user and you are authenticated, get the
16+
authenticated user's orgs, public and private.
17+
18+
If you call it with a user, get the user's public orgs.
19+
20+
::
21+
22+
org_service.list('copitux')
23+
org_service.list()
24+
"""
25+
request = self.request_builder('orgs.list', user=user)
26+
return self._get_result(request)
27+
28+
def get(self, name):
29+
""" Get a single org
30+
31+
:param str name: Org name
32+
"""
33+
request = self.request_builder('orgs.get', name=name)
34+
return self._get(request)
35+
36+
def update(self, name, data):
37+
""" Update a single org
38+
39+
:param str name: Org name
40+
:param dict data: Input. See `github orgs doc`_
41+
42+
.. warning ::
43+
You must be authenticated
44+
45+
::
46+
47+
org_service.update(dict(company='ACME Development',
48+
location='Timbuctoo'))
49+
"""
50+
request = self.request_builder('orgs.update', name=name, body=data)
51+
return self._patch(request)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
import requests
5+
from mock import patch, Mock
6+
7+
from pygithub3.tests.utils.core import TestCase
8+
from pygithub3.resources.base import json
9+
from pygithub3.services.orgs import Org
10+
from pygithub3.tests.utils.base import (mock_response, mock_response_result,
11+
mock_json)
12+
from pygithub3.tests.utils.services import _
13+
14+
json.dumps = Mock(side_effect=mock_json)
15+
json.loads = Mock(side_effect=mock_json)
16+
17+
18+
@patch.object(requests.sessions.Session, 'request')
19+
class TestOrgService(TestCase):
20+
21+
def setUp(self):
22+
self.org = Org()
23+
24+
def test_LIST_without_user(self, request_method):
25+
request_method.return_value = mock_response_result()
26+
self.org.list().all()
27+
self.assertEqual(request_method.call_args[0], ('get', _('user/orgs')))
28+
29+
def test_LIST_with_user(self, request_method):
30+
request_method.return_value = mock_response_result()
31+
self.org.list('octocat').all()
32+
self.assertEqual(request_method.call_args[0],
33+
('get', _('users/octocat/orgs')))
34+
35+
def test_GET(self, request_method):
36+
request_method.return_value = mock_response()
37+
self.org.get('acme')
38+
self.assertEqual(request_method.call_args[0], ('get', _('orgs/acme')))
39+
40+
def test_UPDATE(self, request_method):
41+
request_method.return_value = mock_response('patch')
42+
self.org.update('acme', {'company': 'ACME Widgets'})
43+
self.assertEqual(request_method.call_args[0],
44+
('patch', _('orgs/acme')))

0 commit comments

Comments
 (0)