diff options
Diffstat (limited to 'github3')
-rw-r--r-- | github3/api.py | 26 | ||||
-rw-r--r-- | github3/models.py | 66 |
2 files changed, 76 insertions, 16 deletions
diff --git a/github3/api.py b/github3/api.py index 74a51b9..d11aef6 100644 --- a/github3/api.py +++ b/github3/api.py @@ -7,6 +7,11 @@ github3.api This module provies the core GitHub3 API interface. """ +from urlparse import urlparse, parse_qs + +import requests +from decorator import decorator + from .packages import omnijson as json from .packages.link_header import parse_link_value @@ -15,9 +20,7 @@ from .helpers import is_collection, to_python, to_api, get_scope from .config import settings -import requests -from decorator import decorator PAGING_SIZE = 100 @@ -69,7 +72,7 @@ class GithubCore(object): return r - def _http_resource(self, verb, endpoint, params=None, **etc): + def _http_resource(self, verb, endpoint, params=None, check_status=True, **etc): url = self._generate_url(endpoint) args = (verb, url) @@ -83,7 +86,8 @@ class GithubCore(object): r = self.session.request(*args, **kwargs) r = self._requests_post_hook(r) - r.raise_for_status() + if check_status: + r.raise_for_status() return r @@ -104,7 +108,10 @@ class GithubCore(object): @staticmethod def _total_pages_from_header(link_header): - from urlparse import urlparse, parse_qs + + if link_header is None: + return link_header + page_info = {} for link in link_header.split(','): @@ -147,11 +154,10 @@ class GithubCore(object): kwargs['per_page'] = (limit - r_count) moar = False - r = self._http_resource('GET', resource, params=kwargs) max_page = self._total_pages_from_header(r.headers['link']) - if max_page is True: + if (max_page is True) or (max_page is None): moar = False d_items = self._resource_deserialize(r.content) @@ -203,12 +209,8 @@ class Github(GithubCore): """Get the authenticated user.""" return self._get_resource(('user'), CurrentUser) - # def get_repos(self, username): - # """Get repos.""" - # return self._get_resource(('user', 'username', 'repos'), Repo) - def get_repo(self, username, reponame): - """Get the authenticated user.""" + """Get the given repo.""" return self._get_resource(('repos', username, reponame), Repo) def get_org(self, login): diff --git a/github3/models.py b/github3/models.py index f7cf0e2..ba1ad61 100644 --- a/github3/models.py +++ b/github3/models.py @@ -104,10 +104,14 @@ class User(BaseResource): def repos(self, limit=None): return self._gh._get_resources(('users', self.login, 'repos'), Repo, limit=limit) + def repo(self, reponame): + return self._gh._get_resource(('repos', self.login, reponame), Repo) + def orgs(self): return self._gh._get_resources(('users', self.login, 'orgs'), Org) + class CurrentUser(User): """Github Current User object model.""" @@ -128,8 +132,15 @@ class CurrentUser(User): def repos(self, limit=None): return self._gh._get_resources(('user', 'repos'), Repo, limit=limit) - def orgs(self): - return self._gh._get_resources(('user', 'orgs'), Org) + def repo(self, reponame): + return self._gh._get_resource(('repos', self.login, reponame), Repo) + + def orgs(self, limit=None): + return self._gh._get_resources(('user', 'orgs'), Org, limit=limit) + + def org(self, orgname): + return self._gh._get_resource(('orgs', orgname), Org) + class Org(BaseResource): @@ -137,7 +148,7 @@ class Org(BaseResource): _strs = [ 'login', 'url', 'avatar_url', 'name', 'company', 'blog', 'location', 'email' - 'html_url', 'type'] + 'html_url', 'type', 'billing_email'] _ints = [ 'id', 'public_repos', 'public_gists', 'followers', 'following', 'total_private_repos', 'owned_private_repos', 'private_gists', 'disk_usage', @@ -146,11 +157,58 @@ class Org(BaseResource): _map = {'plan': Plan} _writable = ['billing_email', 'blog', 'company', 'email', 'location', 'name'] + @property + def ri(self): + return ('orgs', self.login) + def __repr__(self): return '<org {0}>'.format(self.login) def repos(self, limit=None): - return self._gh._get_resources(('orgs', self.login, 'repos'), Repo) + return self._gh._get_resources(('orgs', self.login, 'repos'), Repo, limit=limit) + + def members(self, limit=None): + return self._gh._get_resources(('orgs', self.login, 'members'), User, limit=limit) + + def is_member(self, username): + if isinstance(username, User): + username = username.login + + r = self._gh._http_resource('GET', ('orgs', self.login, 'members', username), check_status=False) + return (r.status_code == 204) + + def publicize_member(self, username): + if isinstance(username, User): + username = username.login + + r = self._gh._http_resource('PUT', ('orgs', self.login, 'public_members', username), check_status=False, data='') + return (r.status_code == 204) + + def conceal_member(self, username): + if isinstance(username, User): + username = username.login + + r = self._gh._http_resource('DELETE', ('orgs', self.login, 'public_members', username), check_status=False) + return (r.status_code == 204) + + def remove_member(self, username): + if isinstance(username, User): + username = username.login + + r = self._gh._http_resource('DELETE', ('orgs', self.login, 'members', username), check_status=False) + return (r.status_code == 204) + + def public_members(self, limit=None): + return self._gh._get_resources(('orgs', self.login, 'public_members'), User, limit=limit) + + def is_public_member(self, username): + if isinstance(username, User): + username = username.login + + r = self._gh._http_resource('GET', ('orgs', self.login, 'public_members', username), check_status=False) + return (r.status_code == 204) + + class Repo(BaseResource): |