awake too late

This commit is contained in:
Kenneth Reitz
2011-10-19 10:18:58 -04:00
parent 3d5a4c5022
commit 74c1598973
2 changed files with 76 additions and 16 deletions
+14 -12
View File
@@ -7,6 +7,11 @@ github3.api
This module provies the core GitHub3 API interface. 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 import omnijson as json
from .packages.link_header import parse_link_value 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 from .config import settings
import requests
from decorator import decorator
PAGING_SIZE = 100 PAGING_SIZE = 100
@@ -69,7 +72,7 @@ class GithubCore(object):
return r 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) url = self._generate_url(endpoint)
args = (verb, url) args = (verb, url)
@@ -83,7 +86,8 @@ class GithubCore(object):
r = self.session.request(*args, **kwargs) r = self.session.request(*args, **kwargs)
r = self._requests_post_hook(r) r = self._requests_post_hook(r)
r.raise_for_status() if check_status:
r.raise_for_status()
return r return r
@@ -104,7 +108,10 @@ class GithubCore(object):
@staticmethod @staticmethod
def _total_pages_from_header(link_header): def _total_pages_from_header(link_header):
from urlparse import urlparse, parse_qs
if link_header is None:
return link_header
page_info = {} page_info = {}
for link in link_header.split(','): for link in link_header.split(','):
@@ -147,11 +154,10 @@ class GithubCore(object):
kwargs['per_page'] = (limit - r_count) kwargs['per_page'] = (limit - r_count)
moar = False moar = False
r = self._http_resource('GET', resource, params=kwargs) r = self._http_resource('GET', resource, params=kwargs)
max_page = self._total_pages_from_header(r.headers['link']) 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 moar = False
d_items = self._resource_deserialize(r.content) d_items = self._resource_deserialize(r.content)
@@ -203,12 +209,8 @@ class Github(GithubCore):
"""Get the authenticated user.""" """Get the authenticated user."""
return self._get_resource(('user'), CurrentUser) 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): def get_repo(self, username, reponame):
"""Get the authenticated user.""" """Get the given repo."""
return self._get_resource(('repos', username, reponame), Repo) return self._get_resource(('repos', username, reponame), Repo)
def get_org(self, login): def get_org(self, login):
+62 -4
View File
@@ -104,10 +104,14 @@ class User(BaseResource):
def repos(self, limit=None): def repos(self, limit=None):
return self._gh._get_resources(('users', self.login, 'repos'), Repo, limit=limit) 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): def orgs(self):
return self._gh._get_resources(('users', self.login, 'orgs'), Org) return self._gh._get_resources(('users', self.login, 'orgs'), Org)
class CurrentUser(User): class CurrentUser(User):
"""Github Current User object model.""" """Github Current User object model."""
@@ -128,8 +132,15 @@ class CurrentUser(User):
def repos(self, limit=None): def repos(self, limit=None):
return self._gh._get_resources(('user', 'repos'), Repo, limit=limit) return self._gh._get_resources(('user', 'repos'), Repo, limit=limit)
def orgs(self): def repo(self, reponame):
return self._gh._get_resources(('user', 'orgs'), Org) 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): class Org(BaseResource):
@@ -137,7 +148,7 @@ class Org(BaseResource):
_strs = [ _strs = [
'login', 'url', 'avatar_url', 'name', 'company', 'blog', 'location', 'email' 'login', 'url', 'avatar_url', 'name', 'company', 'blog', 'location', 'email'
'html_url', 'type'] 'html_url', 'type', 'billing_email']
_ints = [ _ints = [
'id', 'public_repos', 'public_gists', 'followers', 'following', 'id', 'public_repos', 'public_gists', 'followers', 'following',
'total_private_repos', 'owned_private_repos', 'private_gists', 'disk_usage', 'total_private_repos', 'owned_private_repos', 'private_gists', 'disk_usage',
@@ -146,11 +157,58 @@ class Org(BaseResource):
_map = {'plan': Plan} _map = {'plan': Plan}
_writable = ['billing_email', 'blog', 'company', 'email', 'location', 'name'] _writable = ['billing_email', 'blog', 'company', 'email', 'location', 'name']
@property
def ri(self):
return ('orgs', self.login)
def __repr__(self): def __repr__(self):
return '<org {0}>'.format(self.login) return '<org {0}>'.format(self.login)
def repos(self, limit=None): 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): class Repo(BaseResource):