8000 Update all calls to _iter · davidmoss/github3.py@1ef433e · GitHub
[go: up one dir, main page]

Skip to content

Commit 1ef433e

Browse files
committed
Update all calls to _iter
100% test coverage for github3/structs
1 parent 5a838d2 commit 1ef433e

File tree

10 files changed

+407
-129
lines changed

10 files changed

+407
-129
lines changed

HISTORY.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,23 @@ History/Changelog
2121
# has changed, it will not count against your ratelimit
2222
# otherwise you'll get the updated user object.
2323

24+
- Add support for conditional iterables. What this means is that you can do:
25+
26+
::
27+
28+
import github3
29+
30+
i = github3.iter_all_repos(10)
31+
32+
for repo in i:
33+
# do stuff
34+
35+
i = github3.iter_all_repos(10, etag=i.etag)
36+
37+
And the second call will only give you the new repositories since the last
38+
request. This mimics behavior in `pengwynn/octokit`_
39+
40+
2441
- Add support for `sortable stars`_.
2542

2643
- In github3.users.User, ``iter_keys`` now allows you to iterate over **any**
@@ -67,6 +84,7 @@ History/Changelog
6784
.. _meta: http://developer.github.com/v3/meta/
6885
.. _sortable stars:
6986
http://developer.github.com/changes/2013-2-13-sortable-stars/
87+
.. _pengwynn/octokit: https://github.com/pengwynn/octokit
7088

7189
0.4: 2013-01-16
7290
---------------

github3/gists.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,17 @@ def is_starred(self):
145145
url = self._build_url('star', base_url=self._api)
146146
return self._boolean(self._get(url), 204, 404)
147147

148-
def iter_comments(self, number=-1):
148+
def iter_comments(self, number=-1, etag=None):
149149
"""List comments on this gist.
150150
151151
:param int number: (optional), number of comments to iterate over.
152152
Default: -1 will iterate over all comments on the gist
153+
:param str etag: (optional), ETag from a previous request to the same
154+
endpoint
153155
:returns: generator of :class:`GistComment <GistComment>`\ s
154156
"""
155157
url = self._build_url('comments', base_url=self._api)
156-
return self._iter(int(number), url, GistComment)
158+
return self._iter(int(number), url, GistComment, etag=etag)
157159

158160
def iter_files(self):
159161
"""List of :class:`GistFile <GistFile>` objects representing the files

github3/github.py

Lines changed: 75 additions & 37 deletions
Large diffs are not rendered by default.

github3/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ def _iter(self, count, url, cls, params=None, etag=None):
148148
:param params dict: (optional) Parameters for the request
149149
:param str etag: (optional), ETag from the last call
150150
"""
151-
from github3.structs import GitHubIterable
152-
return GitHubIterable(count, url, cls, params, etag)
151+
from github3.structs import GitHubIterator
152+
return GitHubIterator(count, url, cls, self, params, etag)
153153

154154
@property
155155
def ratelimit_remaining(self):

github3/orgs.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,26 +96,30 @@ def is_member(self, login):
9696
url = self._build_url('members', login, base_url=self._api)
9797
return self._boolean(self._get(url), 204, 404)
9898

99-
def iter_members(self, number=-1):
99+
def iter_members(self, number=-1, etag=None):
100100
"""Iterate over the members of this team.
101101
102102
:param int number: (optional), number of users to iterate over.
103103
Default: -1 iterates over all values
104+
:param str etag: (optional), ETag from a previous request to the same
105+
endpoint
104106
:returns: generator of :class:`User <github3.users.User>`\ s
105107
"""
106108
url = self._build_url('members', base_url=self._api)
107-
return self._iter(int(number), url, User)
109+
return self._iter(int(number), url, User, etag=etag)
108110

109-
def iter_repos(self, number=-1):
111+
def iter_repos(self, number=-1, etag=None):
110112
"""Iterate over the repositories this team has access to.
111113
112114
:param int number: (optional), number of repos to iterate over.
113115
Default: -1 iterates over all values
116+
:param str etag: (optional), ETag from a previous request to the same
117+
endpoint
114118
:returns: generator of :class:`Repository <github3.repos.Repository>`
115119
objects
116120
"""
117121
url = self._build_url('repos', base_url=self._api)
118-
r F438 eturn self._iter(int(number), url, Repository)
122+
return self._iter(int(number), url, Repository, etag=etag)
119123

120124
@requires_auth
121125
def remove_member(self, login):
@@ -306,62 +310,72 @@ def is_public_member(self, login):
306310
url = self._build_url('public_members', login, base_url=self._api)
307311
return self._boolean(self._get(url), 204, 404)
308312

309-
def iter_events(self, number=-1):
313+
def iter_events(self, number=-1, etag=None):
310314
"""Iterate over events for this org.
311315
312316
:param int number: (optional), number of events to return. Default: -1
313317
iterates over all events available.
318+
:param str etag: (optional), ETag from a previous request to the same
319+
endpoint
314320
:returns: generator of :class:`Event <github3.events.Event>`\ s
315321
"""
316322
url = self._build_url('events', base_url=self._api)
317-
return self._iter(int(number), url, Event)
323+
return self._iter(int(number), url, Event, etag=etag)
318324

319-
def iter_members(self, number=-1):
325+
def iter_members(self, number=-1, etag=None):
320326
"""Iterate over members of this organization.
321327
322328
:param int number: (optional), number of members to return. Default:
323329
-1 will return all available.
330+
:param str etag: (optional), ETag from a previous request to the same
331+
endpoint
324332
:returns: generator of :class:`User <github3.users.User>`\ s
325333
"""
326334
url = self._build_url('members', base_url=self._api)
327-
return self._iter(int(number), url, User)
335+
return self._iter(int(number), url, User, etag=etag)
328336

329-
def iter_public_members(self, number=-1):
337+
def iter_public_members(self, number=-1, etag=None):
330338
"""Iterate over public members of this organization.
331339
332340
:param int number: (optional), number of members to return. Default:
333341
-1 will return all available.
342+
:param str etag: (optional), ETag from a previous request to the same
343+
endpoint
334344
:returns: generator of :class:`User <github3.users.User>`\ s
335345
"""
336346
url = self._build_url('public_members', base_url=self._api)
337-
return self._iter(int(number), url, User)
347+
return self._iter(int(number), url, User, etag=etag)
338348

339-
def iter_repos(self, type='', number=-1):
349+
def iter_repos(self, type='', number=-1, etag=None):
340350
"""Iterate over repos for this organization.
341351
342352
:param str type: (optional), accepted values:
343353
('all', 'public', 'member', 'private', 'forks', 'sources'), API
344354
default: 'all'
345355
:param int number: (optional), number of members to return. Default:
346356
-1 will return all available.
357+
:param str etag: (optional), ETag from a previous request to the same
358+
endpoint
347359
:returns: generator of :class:`Repository <github3.repos.Repository>`
348360
"""
349361
url = self._build_url('repos', base_url=self._api)
350362
params = {}
351363
if type in ('all', 'public', 'member', 'private', 'forks', 'sources'):
352364
params['type'] = type
353-
return self._iter(int(number), url, Repository, params)
365+
return self._iter(int(number), url, Repository, params, etag=etag)
354366

355367
@requires_auth
356-
def iter_teams(self, number=-1):
368+
def iter_teams(self, number=-1, etag=None):
357369
"""Iterate over teams that are part of this organization.
358370
359371
:param int number: (optional), number of teams to return. Default: -1
360372
returns all available teams.
373+
:param str etag: (optional), ETag from a previous request to the same
374+
endpoint
361375
:returns: generator of :class:`Team <Team>`\ s
362376
"""
363377
url = self._build_url('teams', base_url=self._api)
364-
return self._iter(int(number), url, Team)
378+
return self._iter(int(number), url, Team, etag=etag)
365379

366380
@requires_auth
367381
def publicize_member(self, login):

github3/pulls.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,35 +191,41 @@ def is_merged(self):
191191
url = self._build_url('merge', base_url=self._api)
192192
return self._boolean(self._get(url), 204, 404)
193193

194-
def iter_comments(self, number=-1):
194+
def iter_comments(self, number=-1, etag=None):
195195
"""Iterate over the comments on this pull request.
196196
197197
:param int number: (optional), number of comments to return. Default:
198198
-1 returns all available comments.
199+
:param str etag: (optional), ETag from a previous request to the same
200+
endpoint
199201
:returns: generator of :class:`ReviewComment <ReviewComment>`\ s
200202
"""
201203
url = self._build_url('comments', base_url=self._api)
202-
return self._iter(int(number), url, ReviewComment)
204+
return self._iter(int(number), url, ReviewComment, etag=etag)
203205

204-
def iter_commits(self, number=-1):
206+
def iter_commits(self, number=-1, etag=None):
205207
"""Iterates over the commits on this pull request.
206208
207209
:param int number: (optional), number of commits to return. Default:
208210
-1 returns all available commits.
211+
:param str etag: (optional), ETag from a previous request to the same
212+
endpoint
209213
:returns: generator of :class:`Commit <github3.git.Commit>`\ s
210214
"""
211215
url = self._build_url('commits', base_url=self._api)
212-
return self._iter(int(number), url, Commit)
216+
return self._iter(int(number), url, Commit, etag=etag)
213217

214-
def iter_files(self, number=-1):
218+
def iter_files(self, number=-1, etag=None):
215219
"""Iterate over the files associated with this pull request.
216220
217221
:param int number: (optional), number of files to return. Default:
218222
-1 returns all available files.
223+
:param str etag: (optional), ETag from a previous request to the same
224+
endpoint
219225
:returns: generator of :class:`PullFile <PullFile>`\ s
220226
"""
221227
url = self._build_url('files', base_url=self._api)
222-
return self._iter(int(number), url, PullFile)
228+
return self._iter(int(number), url, PullFile, etag=etag)
223229

224230
@requires_auth
225231
def merge(self, commit_message=''):

0 commit comments

Comments
 (0)
0