Skip to content

Commit 3371f0a

Browse files
committed
Repos service initialized
+service.repos.repo
1 parent 869e2ab commit 3371f0a

File tree

7 files changed

+370
-0
lines changed

7 files changed

+370
-0
lines changed

pygithub3/github.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@
22
# -*- encoding: utf-8 -*-
33

44
from pygithub3.services.users import User
5+
from pygithub3.services.repos import Repo
56

67

78
class Github(object):
89
""" Main entrance """
910

1011
def __init__(self, **config):
1112
self._users = User(**config)
13+
self._repos = Repo(**config)
1214

1315
@property
1416
def users(self):
1517
return self._users
18+
19+
@property
20+
def repos(self):
21+
return self._repos
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests import Request, ValidationError
4+
from repo import *

pygithub3/requests/repos/repo.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from . import Request
5+
from pygithub3.resources.repos import Repo, Team, Tag, Branch
6+
from pygithub3.resources.users import User
7+
8+
__all__ = ('List', 'List_by_org', 'Create', 'Get', 'Update',
9+
'List_contributors', 'List_languages', 'List_teams', 'List_tags',
10+
'List_branches')
11+
12+
13+
class List(Request):
14+
15+
uri = 'users/{user}/repos'
16+
resource = Repo
17+
18+
def clean_uri(self):
19+
if not self.user:
20+
return 'user/repos'
21+
22+
23+
class List_by_org(Request):
24+
25+
uri = 'orgs/{org}/repos'
26+
resource = Repo
27+
28+
29+
class Create(Request):
30+
31+
uri = 'orgs/{org}/repos'
32+
resource = Repo
33+
body_schema = {
34+
'schema': ('name', 'description', 'homepage', 'private', 'has_issues',
35+
'has_wiki', 'has_downloads', 'team_id'),
36+
'required': ('name', )
37+
}
38+
39+
def clean_uri(self):
40+
if not self.org:
41+
return 'user/repos'
42+
43+
44+
class Get(Request):
45+
46+
uri = 'repos/{user}/{repo}'
47+
resource = Repo
48+
49+
50+
class Update(Request):
51+
52+
uri = 'repos/{user}/{repo}'
53+
resource = Repo
54+
body_schema = {
55+
'schema': ('name', 'description', 'homepage', 'private', 'has_issues',
56+
'has_wiki', 'has_downloads', 'team_id'),
57+
'required': ('name', )
58+
}
59+
60+
61+
class List_contributors(Request):
62+
63+
uri = 'repos/{user}/{repo}/contributors'
64+
resource = User
65+
66+
67+
class List_languages(Request):
68+
69+
uri = 'repos/{user}/{repo}/languages'
70+
71+
72+
class List_teams(Request):
73+
74+
uri = 'repos/{user}/{repo}/teams'
75+
resource = Team
76+
77+
78+
class List_tags(Request):
79+
80+
uri = 'repos/{user}/{repo}/tags'
81+
resource = Tag
82+
83+
class List_branches(Request):
84+
85+
uri = 'repos/{user}/{repo}/branches'
86+
resource = Branch

pygithub3/resources/orgs.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from .base import Resource
5+
6+
__all__ = ('Org', )
7+
8+
9+
class Org(Resource):
10+
11+
_dates = ('created_at', )
12+
13+
def __str__(self):
14+
return '<Org (%s)>' % getattr(self, 'name', '')

pygithub3/resources/repos.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from .base import Resource
5+
from .users import User
6+
from .orgs import Org
7+
8+
__all__ = ('Repo', )
9+
10+
11+
class Repo(Resource):
12+
13+
_dates = ('created_at', 'pushed_at')
14+
_maps = {'owner': User, 'organization': Org, 'parent': 'self',
15+
'source': 'self'}
16+
17+
def __str__(self):
18+
return '<Repo (%s)>' % getattr(self, 'name', '')
19+
20+
21+
class Team(Resource):
22+
23+
def __str__(self):
24+
return '<Team (%s)>' % getattr(self, 'name', '')
25+
26+
27+
class Commit(Resource):
28+
29+
def __str__(self):
30+
return '<Commit (%s:%s)>' % (
31+
getattr(self, 'sha', ''),
32+
getattr(self, 'message', ''))
33+
34+
35+
class Tag(Resource):
36+
37+
_maps = {'commit': Commit}
38+
39+
def __str__(self):
40+
return '<Tag (%s)>' % getattr(self, 'name', '')
41+
42+
43+
class Branch(Resource):
44+
45+
_maps = {'commit': Commit}
46+
47+
def __str__(self):
48+
return '<Branch (%s)>' % getattr(self, 'name', '')

pygithub3/services/repos.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from .base import Base
5+
6+
7+
class Repo(Base):
8+
9+
def __init__(self, **config):
10+
super(Repo, self).__init__(**config)
11+
12+
def list(self, user=None, type='all'):
13+
request = self.make_request('repos.list',
14+
user=user or self.get_user())
15+
return self._get_result(request, type=type)
16+
17+
def list_by_org(self, org, type='all'):
18+
request = self.make_request('repos.list_by_org', org=org)
19+
return self._get_result(request, type=type)
20+
21+
def create(self, data, in_org=None):
22+
request = self.make_request('repos.create', org=in_org, body=data)
23+
return self._post(request)
24+
25+
def get(self, user=None, repo=None):
26+
request = self.make_request('repos.get',
27+
user=user or self.get_user(),
28+
repo=repo or self.get_repo())
29+
return self._get(request)
30+
31+
def update(self, data, user=None, repo=None):
32+
request = self.make_request('repos.update',
33+
body=data,
34+
user=user or self.get_user(),
35+
repo=repo or self.get_repo())
36+
return self._patch(request)
37+
38+
def __list_contributors(self, user=None, repo=None, **kwargs):
39+
request = self.make_request('repos.list_contributors',
40+
user=user or self.get_user(),
41+
repo=repo or self.get_repo())
42+
return self._get_result(request, **kwargs)
43+
44+
def list_contributors(self, user=None, repo=None):
45+
return self.__list_contributors(user, repo)
46+
47+
def list_contributors_with_anonymous(self, user=None, repo=None):
48+
return self.__list_contributors(user, repo, anom=True)
49+
50+
def list_languages(self, user=None, repo=None):
51+
request = self.make_request('repos.list_languages',
52+
user=user or self.get_user(),
53+
repo=repo or self.get_repo())
54+
return self._get(request)
55+
56+
def list_teams(self, user=None, repo=None):
57+
request = self.make_request('repos.list_teams',
58+
user=user or self.get_user(),
59+
repo=repo or self.get_repo())
60+
return self._get_result(request)
61+
62+
def list_tags(self, user=None, repo=None):
63+
request = self.make_request('repos.list_tags',
64+
user=user or self.get_user(),
65+
repo=repo or self.get_repo())
66+
return self._get_result(request)
67+
68+
def list_branches(self, user=None, repo=None):
69+
request = self.make_request('repos.list_branches',
70+
user=user or self.get_user(),
71+
repo=repo or self.get_repo())
72+
return self._get_result(request)
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from unittest import TestCase
5+
6+
import requests
7+
from mock import patch, Mock
8+
9+
from pygithub3.services.repos import Repo
10+
from pygithub3.resources.base import json
11+
from pygithub3.tests.utils.base import mock_response, mock_response_result
12+
from pygithub3.tests.utils.services import _, mock_json
13+
14+
json.dumps = Mock(side_effect=mock_json)
15+
json.loads = Mock(side_effect=mock_json)
16+
17+
18+
@patch.object(requests.sessions.Session, 'request')
19+
class TestRepoService(TestCase):
20+
21+
def setUp(self):
22+
self.rs = Repo()
23+
self.rs.set_user('octocat')
24+
self.rs.set_repo('octocat_repo')
25+
26+
def test_LIST_without_user(self, request_method):
27+
request_method.return_value = mock_response_result()
28+
self.rs.set_user('')
29+
self.rs.list().all()
30+
self.assertEqual(request_method.call_args[0], ('get', _('user/repos')))
31+
32+
def test_LIST_with_user_in_args(self, request_method):
33+
request_method.return_value = mock_response_result()
34+
self.rs.list('octoc').all()
35+
self.assertEqual(request_method.call_args[0],
36+
('get', _('users/octoc/repos')))
37+
38+
def test_LIST_with_user_in_service(self, request_method):
39+
request_method.return_value = mock_response_result()
40+
self.rs.list().all()
41+
self.assertEqual(request_method.call_args[0],
42+
('get', _('users/octocat/repos')))
43+
44+
def test_LIST_filters(self, request_method):
45+
request_method.return_value = mock_response_result()
46+
self.rs.list('octoc', type='public').all()
47+
self.assertEqual(request_method.call_args[0],
48+
('get', _('users/octoc/repos')))
49+
self.assertEqual(request_method.call_args[1]['params']['type'],
50+
'public')
51+
52+
def test_LIST_BY_ORG(self, request_method):
53+
request_method.return_value = mock_response_result()
54+
self.rs.list_by_org('org_name').all()
55+
self.assertEqual(request_method.call_args[0],
56+
('get', _('orgs/org_name/repos')))
57+
58+
def test_LIST_BY_ORG_filters(self, request_method):
59+
request_method.return_value = mock_response_result()
60+
self.rs.list_by_org('org_name', type='public').all()
61+
self.assertEqual(request_method.call_args[0],
62+
('get', _('orgs/org_name/repos')))
63+
self.assertEqual(request_method.call_args[1]['params']['type'],
64+
'public')
65+
66+
def test_CREATE(self, request_method):
67+
request_method.return_value = mock_response('post')
68+
self.rs.create({'name': 'test'})
69+
self.assertEqual(request_method.call_args[0],
70+
('post', _('user/repos')))
71+
72+
def test_CREATE_in_org(self, request_method):
73+
request_method.return_value = mock_response('post')
74+
self.rs.create({'name': 'test'}, in_org='org_name')
75+
self.assertEqual(request_method.call_args[0],
76+
('post', _('orgs/org_name/repos')))
77+
78+
def test_GET_with_repo_in_args(self, request_method):
79+
request_method.return_value = mock_response()
80+
self.rs.get(user='user', repo='repo')
81+
self.assertEqual(request_method.call_args[0],
82+
('get', _('repos/user/repo')))
83+
84+
def test_GET_with_repo_in_service(self, request_method):
85+
request_method.return_value = mock_response()
86+
self.rs.get()
87+
self.assertEqual(request_method.call_args[0],
88+
('get', _('repos/octocat/octocat_repo')))
89+
90+
def test_UPDATE_with_repo_in_args(self, request_method):
91+
request_method.return_value = mock_response('patch')
92+
self.rs.update({'name': 'test'}, user='user', repo='repo')
93+
self.assertEqual(request_method.call_args[0],
94+
('patch', _('repos/user/repo')))
95+
96+
def test_UPDATE_with_repo_in_service(self, request_method):
97+
request_method.return_value = mock_response('patch')
98+
self.rs.update({'name': 'test'})
99+
self.assertEqual(request_method.call_args[0],
100+
('patch', _('repos/octocat/octocat_repo')))
101+
102+
""" From here I stop to do '*in_args' and '*filter' tests, I consider
103+
that I tested it enough... """
104+
105+
def test_LIST_contributors(self, request_method):
106+
request_method.return_value = mock_response_result()
107+
self.rs.list_contributors().all()
108+
self.assertEqual(request_method.call_args[0],
109+
('get', _('repos/octocat/octocat_repo/contributors')))
110+
111+
def test_LIST_contributors_with_anonymous(self, request_method):
112+
request_method.return_value = mock_response_result()
113+
self.rs.list_contributors_with_anonymous().all()
114+
self.assertEqual(request_method.call_args[0],
115+
('get', _('repos/octocat/octocat_repo/contributors')))
116+
self.assertEqual(request_method.call_args[1]['params']['anom'], True)
117+
118+
def test_LIST_languages(self, request_method):
119+
request_method.return_value = mock_response()
120+
self.rs.list_languages()
121+
self.assertEqual(request_method.call_args[0],
122+
('get', _('repos/octocat/octocat_repo/languages')))
123+
124+
def test_LIST_teams(self, request_method):
125+
request_method.return_value = mock_response_result()
126+
self.rs.list_teams().all()
127+
self.assertEqual(request_method.call_args[0],
128+
('get', _('repos/octocat/octocat_repo/teams')))
129+
130+
def test_LIST_tags(self, request_method):
131+
request_method.return_value = mock_response_result()
132+
self.rs.list_tags().all()
133+
self.assertEqual(request_method.call_args[0],
134+
('get', _('repos/octocat/octocat_repo/tags')))
135+
136+
def test_LIST_branches(self, request_method):
137+
request_method.return_value = mock_response_result()
138+
self.rs.list_branches().all()
139+
self.assertEqual(request_method.call_args[0],
140+
('get', _('repos/octocat/octocat_repo/branches')))

0 commit comments

Comments
 (0)