aboutsummaryrefslogtreecommitdiffstats
path: root/github3
diff options
context:
space:
mode:
Diffstat (limited to 'github3')
-rw-r--r--github3/handlers/users.py37
-rw-r--r--github3/tests/user_handler_test.py51
2 files changed, 80 insertions, 8 deletions
diff --git a/github3/handlers/users.py b/github3/handlers/users.py
index 4a181c8..ec40f02 100644
--- a/github3/handlers/users.py
+++ b/github3/handlers/users.py
@@ -108,17 +108,35 @@ class User(Handler):
limit=limit)
-class AuthUser(User):
+class AuthUser(Handler):
""" User handler with public and private access """
prefix = 'user'
+ def __init__(self, gh):
+ super(AuthUser, self).__init__(gh)
+ self._inject_handler(User(gh), prefix='get')
+
def __repr__(self):
return '<AuthUser handler> %s>' % self._gh.session.auth[0]
- def get(self):
+ def me(self):
+ """ Return authenticated user """
+
return self._get_resource('', model=models.AuthUser)
+ def my_followers(self, limit=None):
+ """ Return authenticated user followers """
+
+ return self._get_resources('followers', model=models.User,
+ limit=limit)
+
+ def my_following(self, limit=None):
+ """ Return authenticated user following """
+
+ return self._get_resources('following', model=models.User,
+ limit=limit)
+
def get_emails(self):
""" Return list of emails """
@@ -220,7 +238,7 @@ class AuthUser(User):
parse_key_id = getattr(key, 'id', key)
return self._delete('keys/%s' % parse_key_id)
- def get_repos(self, filter='all', limit=None):
+ def my_repos(self, filter='all', limit=None):
"""
Return user's public repositories
@@ -230,6 +248,12 @@ class AuthUser(User):
return self._get_resources('repos', model=models.Repo,
limit=limit, type=str(filter))
+ def my_watched(self, limit=None):
+ """ Return authenticated user repos that he watch """
+
+ return self._get_resources('watched', model=models.Repo,
+ limit=limit)
+
def is_watching_repo(self, owner, repo):
"""
Return true if you are watching the user repository
@@ -266,3 +290,10 @@ class AuthUser(User):
owner = getattr(owner, 'login', owner)
repo = getattr(repo, 'name', repo)
return self._delete('watched/%s/%s' % (owner, repo))
+
+ def my_orgs(self, limit=None):
+ """ List public and private organizations
+ for the authenticated user
+ """
+
+ return self._get_resources('orgs', model=models.Org, limit=limit)
diff --git a/github3/tests/user_handler_test.py b/github3/tests/user_handler_test.py
index 28fda3b..33658d2 100644
--- a/github3/tests/user_handler_test.py
+++ b/github3/tests/user_handler_test.py
@@ -7,6 +7,7 @@ from github3 import api
from fixtures import *
from github3.models import User, AuthUser, Repo, Gist, Org, Key
from github3.exceptions import *
+from github3 import handlers
class TestAuthUserHandler(TestCase):
@@ -18,14 +19,54 @@ class TestAuthUserHandler(TestCase):
self.user_mock = Mock()
self.user_mock.login = 'user_model'
+ def test_inject_user_handler(self):
+ self.assertEquals(self.handler.get.im_class, handlers.users.User)
+ self.assertEquals(self.handler.get_followers.im_class,
+ handlers.users.User)
+ self.assertEquals(self.handler.get_following.im_class,
+ handlers.users.User)
+ self.assertEquals(self.handler.get_repos.im_class,
+ handlers.users.User)
+ self.assertEquals(self.handler.get_watched.im_class,
+ handlers.users.User)
+ self.assertEquals(self.handler.get_orgs.im_class,
+ handlers.users.User)
+ self.assertEquals(self.handler.get_gists.im_class,
+ handlers.users.User)
+
@patch.object(api.Github, 'get')
- def test_get(self, get):
+ def test_me(self, get):
get.return_value = GET_FULL_USER
- user = self.handler.get()
+ user = self.handler.me()
self.assertIsInstance(user, AuthUser)
get.assert_called_with('user')
self.assertEquals(len(user), len(GET_FULL_USER))
+ @patch.object(handlers.base.Handler, '_get_resource')
+ def test_get(self, get):
+ user = self.handler.get('test')
+ get.assert_called_with('test', model=User)
+
+ @patch.object(handlers.base.Handler, '_get_resources')
+ def test_get_my_followers(self, get):
+ followers = self.handler.my_followers()
+ get.assert_called_with('followers', model=User, limit=None)
+
+ @patch.object(handlers.base.Handler, '_get_resources')
+ def test_get_my_following(self, get):
+ following = self.handler.my_following()
+ get.assert_called_with('following', model=User, limit=None)
+
+ @patch.object(handlers.base.Handler, '_get_resources')
+ def test_get_my_watched(self, get):
+ following = self.handler.my_watched()
+ get.assert_called_with('watched', model=Repo, limit=None)
+
+ @patch.object(handlers.base.Handler, '_get_resources')
+ def test_get_my_orgs(self, get):
+ following = self.handler.my_orgs()
+ get.assert_called_with('orgs', model=Org, limit=None)
+
@patch.object(api.Github, 'get')
def test_get_emails(self, get):
get.return_value = GET_USER_EMAILS
@@ -117,17 +158,17 @@ class TestAuthUserHandler(TestCase):
delete.assert_called_with('user/keys/1', method='delete')
@patch.object(api.Github, '_request')
- def test_get_repos(self, request):
+ def test_my_repos(self, request):
response = request.return_value
response.status_code = 200
response.content = self.gh._parser.dumps(GET_SHORT_REPOS)
response.headers = {'link': GET_LINK} # 1 per page
- repos = list(self.handler.get_repos(filter='public'))
+ repos = list(self.handler.my_repos(filter='public'))
self.assertEquals(len(repos), 5)
self.assertIsInstance(repos[0], Repo)
request.assert_called_with('GET', 'user/repos',
page=5, type='public')
- repos = list(self.handler.get_repos(limit=2))
+ repos = list(self.handler.my_repos(limit=2))
self.assertEquals(len(repos), 2)
@patch.object(api.Github, 'head')