Skip to content

Commit 74c1598

Browse files
author
Kenneth Reitz
committed
awake too late
1 parent 3d5a4c5 commit 74c1598

File tree

2 files changed

+76
-16
lines changed

2 files changed

+76
-16
lines changed

github3/api.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
This module provies the core GitHub3 API interface.
88
"""
99

10+
from urlparse import urlparse, parse_qs
11+
12+
import requests
13+
from decorator import decorator
14+
1015
from .packages import omnijson as json
1116
from .packages.link_header import parse_link_value
1217

@@ -15,9 +20,7 @@
1520
from .config import settings
1621

1722

18-
import requests
1923

20-
from decorator import decorator
2124

2225
PAGING_SIZE = 100
2326

@@ -69,7 +72,7 @@ def _requests_post_hook(self, r):
6972
return r
7073

7174

72-
def _http_resource(self, verb, endpoint, params=None, **etc):
75+
def _http_resource(self, verb, endpoint, params=None, check_status=True, **etc):
7376

7477
url = self._generate_url(endpoint)
7578
args = (verb, url)
@@ -83,7 +86,8 @@ def _http_resource(self, verb, endpoint, params=None, **etc):
8386
r = self.session.request(*args, **kwargs)
8487
r = self._requests_post_hook(r)
8588

86-
r.raise_for_status()
89+
if check_status:
90+
r.raise_for_status()
8791

8892
return r
8993

@@ -104,7 +108,10 @@ def _patch_resource(self, resource, data, **kwargs):
104108

105109
@staticmethod
106110
def _total_pages_from_header(link_header):
107-
from urlparse import urlparse, parse_qs
111+
112+
if link_header is None:
113+
return link_header
114+
108115
page_info = {}
109116

110117
for link in link_header.split(','):
@@ -147,11 +154,10 @@ def _get_resources(self, resource, obj, limit=None, **kwargs):
147154
kwargs['per_page'] = (limit - r_count)
148155
moar = False
149156

150-
151157
r = self._http_resource('GET', resource, params=kwargs)
152158
max_page = self._total_pages_from_header(r.headers['link'])
153159

154-
if max_page is True:
160+
if (max_page is True) or (max_page is None):
155161
moar = False
156162

157163
d_items = self._resource_deserialize(r.content)
@@ -203,12 +209,8 @@ def get_me(self):
203209
"""Get the authenticated user."""
204210
return self._get_resource(('user'), CurrentUser)
205211

206-
# def get_repos(self, username):
207-
# """Get repos."""
208-
# return self._get_resource(('user', 'username', 'repos'), Repo)
209-
210212
def get_repo(self, username, reponame):
211-
"""Get the authenticated user."""
213+
"""Get the given repo."""
212214
return self._get_resource(('repos', username, reponame), Repo)
213215

214216
def get_org(self, login):

github3/models.py

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,14 @@ def __repr__(self):
104104
def repos(self, limit=None):
105105
return self._gh._get_resources(('users', self.login, 'repos'), Repo, limit=limit)
106106

107+
def repo(self, reponame):
108+
return self._gh._get_resource(('repos', self.login, reponame), Repo)
109+
107110
def orgs(self):
108111
return self._gh._get_resources(('users', self.login, 'orgs'), Org)
109112

110113

114+
111115
class CurrentUser(User):
112116
"""Github Current User object model."""
113117

@@ -128,16 +132,23 @@ def __repr__(self):
128132
def repos(self, limit=None):
129133
return self._gh._get_resources(('user', 'repos'), Repo, limit=limit)
130134

131-
def orgs(self):
132-
return self._gh._get_resources(('user', 'orgs'), Org)
135+
def repo(self, reponame):
136+
return self._gh._get_resource(('repos', self.login, reponame), Repo)
137+
138+
def orgs(self, limit=None):
139+
return self._gh._get_resources(('user', 'orgs'), Org, limit=limit)
140+
141+
def org(self, orgname):
142+
return self._gh._get_resource(('orgs', orgname), Org)
143+
133144

134145

135146
class Org(BaseResource):
136147
"""Github Organization object model."""
137148

138149
_strs = [
139150
'login', 'url', 'avatar_url', 'name', 'company', 'blog', 'location', 'email'
140-
'html_url', 'type']
151+
'html_url', 'type', 'billing_email']
141152
_ints = [
142153
'id', 'public_repos', 'public_gists', 'followers', 'following',
143154
'total_private_repos', 'owned_private_repos', 'private_gists', 'disk_usage',
@@ -146,11 +157,58 @@ class Org(BaseResource):
146157
_map = {'plan': Plan}
147158
_writable = ['billing_email', 'blog', 'company', 'email', 'location', 'name']
148159

160+
@property
161+
def ri(self):
162+
return ('orgs', self.login)
163+
149164
def __repr__(self):
150165
return '<org {0}>'.format(self.login)
151166

152167
def repos(self, limit=None):
153-
return self._gh._get_resources(('orgs', self.login, 'repos'), Repo)
168+
return self._gh._get_resources(('orgs', self.login, 'repos'), Repo, limit=limit)
169+
170+
def members(self, limit=None):
171+
return self._gh._get_resources(('orgs', self.login, 'members'), User, limit=limit)
172+
173+
def is_member(self, username):
174+
if isinstance(username, User):
175+
username = username.login
176+
177+
r = self._gh._http_resource('GET', ('orgs', self.login, 'members', username), check_status=False)
178+
return (r.status_code == 204)
179+
180+
def publicize_member(self, username):
181+
if isinstance(username, User):
182+
username = username.login
183+
184+
r = self._gh._http_resource('PUT', ('orgs', self.login, 'public_members', username), check_status=False, data='')
185+
return (r.status_code == 204)
186+
187+
def conceal_member(self, username):
188+
if isinstance(username, User):
189+
username = username.login
190+
191+
r = self._gh._http_resource('DELETE', ('orgs', self.login, 'public_members', username), check_status=False)
192+
return (r.status_code == 204)
193+
194+
def remove_member(self, username):
195+
if isinstance(username, User):
196+
username = username.login
197+
198+
r = self._gh._http_resource('DELETE', ('orgs', self.login, 'members', username), check_status=False)
199+
return (r.status_code == 204)
200+
201+
def public_members(self, limit=None):
202+
return self._gh._get_resources(('orgs', self.login, 'public_members'), User, limit=limit)
203+
204+
def is_public_member(self, username):
205+
if isinstance(username, User):
206+
username = username.login
207+
208+
r = self._gh._http_resource('GET', ('orgs', self.login, 'public_members', username), check_status=False)
209+
return (r.status_code == 204)
210+
211+
154212

155213

156214
class Repo(BaseResource):

0 commit comments

Comments
 (0)