8000 Closes #77 · dahlia/github3.py@44e0373 · GitHub
[go: up one dir, main page]

Skip to content

Commit 44e0373

Browse files
committed
1 parent 2acdaed commit 44e0373

File tree

5 files changed

+79
-25
lines changed

5 files changed

+79
-25
lines changed

HISTORY.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ History/Changelog
2525

2626
- Remove vendored dependency of PySO8601.
2727

28+
- Split `GitHub.iter_repos` into `GitHub.iter_user_repos` and
29+
`GitHub.iter_repos`. As a consequence `github3.iter_repos` is now
30+
`github3.iter_user_repos`
31+
2832
0.5.3: 2013-03-19
2933
-----------------
3034

github3/api.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,17 @@ def iter_orgs(username, number=-1, etag=None):
199199
return gh.iter_orgs(username, number, etag) if username else []
200200

201201

202-
def iter_repos(login, type='', sort='', direction='', number=-1, etag=None):
203-
"""List public repositories for the specified ``login`` or all
204-
repositories for the authenticated user if ``login`` is not
205-
provided.
202+
def iter_user_repos(login, type=None, sort=None, direction=None, number=-1,
203+
etag=None):
204+
"""List public repositories for the specified ``login``.
205+
206+
.. versionadded:: 0.6
207+
208+
.. note:: This replaces github3.iter_repos
206209
207210
:param str login: (required)
208211
:param str type: (optional), accepted values:
209-
('all', 'owner', 'public', 'private', 'member')
212+
('all', 'owner', 'member')
210213
API default: 'all'
211214
:param str sort: (optional), accepted values:
212215
('created', 'updated', 'pushed', 'full_name')
@@ -222,7 +225,7 @@ def iter_repos(login, type='', sort='', direction='', number=-1, etag=None):
222225
objects
223226
"""
224227
if login:
225-
return gh.iter_repos(login, type, sort, direction, number, etag)
228+
return gh.iter_user_repos(login, type, sort, direction, number, etag)
226229
return iter([])
227230

228231

github3/github.py

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -616,13 +616,16 @@ def iter_orgs(self, login=None, number=-1, etag=None):
616616

617617
return self._iter(int(number), url, Organization, etag=etag)
618618

619-
def iter_repos(self, login=None, type='', sort='', direction='',
620-
number=-1, etag=None):
619+
@requires_auth
620+
def iter_repos(self, type=None, sort=None, direction=None, number=-1,
621+
etag=None):
621622
"""List public repositories for the specified ``login`` or all
622623
repositories for the authenticated user if ``login`` is not
623624
provided.
624625
625-
:param str login: (optional)
626+
.. versionchanged:: 0.6
627+
Removed the login parameter for correctness. Use iter_user_repos
628+
626629
:param str type: (optional), accepted values:
627630
('all', 'owner', 'public', 'private', 'member')
628631
API default: 'all'
@@ -639,10 +642,7 @@ def iter_repos(self, login=None, type='', sort='', direction='',
639642
:returns: generator of :class:`Repository <github3.repos.Repository>`
640643
objects
641644
"""
642-
if login:
643-
url = self._build_url('users', login, 'repos')
644-
else:
645-
url = self._build_url('user', 'repos')
645+
url = self._build_url('user', 'repos')
646646

647647
params = {}
648648
if type in ('all', 'owner', 'public', 'private', 'member'):
@@ -700,6 +700,41 @@ def iter_subscriptions(self, login=None, number=-1, etag=None):
700700
url = self._build_url('user', 'subscriptions')
701701
return self._iter(int(number), url, Repository, etag=etag)
702702

703+
def iter_user_repos(self, login, type=None, sort=None, direction=None,
704+
number=-1, etag=None):
705+
"""List public repositories for the specified ``login``.
706+
707+
.. versionadded:: 0.6
708+
709+
:param str login: (required), username
710+
:param str type: (optional), accepted values:
711+
('all', 'owner', 'member')
712+
API default: 'all'
713+
:param str sort: (optional), accepted values:
714+
('created', 'updated', 'pushed', 'full_name')
715+
API default: 'created'
716+
:param str direction: (optional), accepted values:
717+
('asc', 'desc'), API default: 'asc' when using 'full_name',
718+
'desc' otherwise
719+
:param int number: (optional), number of repositories to return.
A3E2 720+
Default: -1 returns all repositories
721+
:param str etag: (optional), ETag from a previous request to the same
722+
endpoint
723+
:returns: generator of :class:`Repository <github3.repos.Repository>`
724+
objects
725+
"""
726+
url = self._build_url('users', login, 'repos')
727+
728+
params = {}
729+
if type in ('all', 'owner', 'member'):
730+
params.update(type=type)
731+
if sort in ('created', 'updated', 'pushed', 'full_name'):
732+
params.update(sort=sort)
733+
if direction in ('asc', 'desc'):
734+
params.update(direction=direction)
735+
736+
return self._iter(int(number), url, Repository, params, etag)
737+
703738
@requires_auth
704739
def key(self, id_num):
705740
"""Gets the authenticated user's key specified by id_num.

tests/test_api.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,12 @@ def test_iter_orgs(self):
7575
github3.iter_orgs(*args)
7676
self.gh.iter_orgs.assert_called_with(*args)
7777

78-
def test_iter_repos(self):
79-
args = ('login', '', '', '', -1, None)
80-
github3.iter_repos(*args)
81-
self.gh.iter_repos.assert_called_with(*args)
78+
def test_iter_user_repos(self):
79+
args = ('login', None, None, None, -1, None)
80+
github3.iter_user_repos('login')
81+
self.gh.iter_user_repos.assert_called_with(*args)
8282

83-
github3.iter_repos(None)
83+
github3.iter_user_repos(None)
8484

8585
def test_iter_starred(self):
8686
github3.iter_starred('login')

tests/test_github.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -446,17 +446,34 @@ def test_iter_repos(self):
446446
self.get('https://api.github.com/user/repos')
447447
self.conf.update(params={})
448448

449+
with expect.githuberror():
450+
self.g.iter_repos()
451+
449452
self.login()
450453
expect(next(self.g.iter_repos())).isinstance(github3.repos.Repository)
451454
self.mock_assertions()
452455

453-
self.get('https://api.github.com/users/sigmavirus24/repos')
454456
expect(next(self.g.iter_repos('sigmavirus24'))).isinstance(
455457
github3.repos.Repository)
456458
self.mock_assertions()
457459

458460
self.conf.update(params={'type': 'all', 'direction': 'desc'})
459-
next(self.g.iter_repos('sigmavirus24', 'all', direction='desc'))
461+
462+
next(self.g.iter_repos('all', direction='desc'))
463+
self.mock_assertions()
464+
465+
def test_iter_user_repos(self):
466+
self.response('repo', _iter=True)
467+
self.get('https://api.github.com/users/sigmavirus24/repos')
468+
self.conf.update(params={'type': 'all', 'direction': 'desc'})
469+
470+
next(self.g.iter_user_repos('sigmavirus24', 'all', direction='desc'))
471+
self.mock_assertions()
472+
473+
self.conf.update(params={"sort": "created"})
474+
self.get('https://api.github.com/users/sigmavirus24/repos')
475+
expect(next(self.g.iter_user_repos('sigmavirus24', sort="created"))
476+
).isinstance(github3.repos.Repository)
460477
self.mock_assertions()
461478

462479
def test_iter_repos_sort(self):
@@ -469,11 +486,6 @@ def test_iter_repos_sort(self):
469486
).isinstance(github3.repos.Repository)
470487
self.mock_assertions()
471488

472-
self.get('https://api.github.com/users/sigmavirus24/repos')
473-
expect(next(self.g.iter_repos('sigmavirus24', sort="created"))
474-
).isinstance(github3.repos.Repository)
475-
self.mock_assertions()
476-
477489
def test_iter_starred(self):
478490
self.response('repo', _iter=True)
479491
self.get('https://api.github.com/user/starred')

0 commit comments

Comments
 (0)
0