Skip to content

Commit 3a52231

Browse files
committed
services.gists.Gist done
1 parent 69281ba commit 3a52231

File tree

4 files changed

+221
-3
lines changed

4 files changed

+221
-3
lines changed

pygithub3/github.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ class Github(object):
1515
def __init__(self, **config):
1616
from pygithub3.services.users import User
1717
from pygithub3.services.repos import Repos
18+
from pygithub3.services.gists import Gist
1819
self._users = User(**config)
1920
self._repos = Repos(**config)
21+
self._gists = Gist(**config)
2022

2123
@property
2224
def remaining_requests(self):
@@ -37,3 +39,10 @@ def repos(self):
3739
:ref:`Repos service <Repos service>`
3840
"""
3941
return self._repos
42+
43+
@property
44+
def gists(self):
45+
"""
46+
:ref:`Gist service <Gist service>`
47+
"""
48+
return self._gists
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request, ValidationError
4+
from pygithub3.resources.gists import Gist
5+
6+
class List(Request):
7+
8+
uri = 'users/{user}/gists'
9+
resource = Gist
10+
11+
def clean_uri(self):
12+
if not self.user:
13+
return 'gists'
14+
15+
16+
class Public(Request):
17+
18+
uri = 'gists/public'
19+
resource = Gist
20+
21+
22+
class Starred(Request):
23+
24+
uri = 'gists/starred'
25+
resource = Gist
26+
27+
28+
class Get(Request):
29+
30+
uri = 'gists/{id}'
31+
resource = Gist
32+
33+
34+
class Create(Request):
35+
36+
uri = 'gists'
37+
resource = Gist
38+
body_schema = {
39+
'schema': ('description', 'public', 'files'),
40+
'required': ('public', 'files')
41+
}
42+
43+
44+
class Update(Request):
45+
46+
uri = 'gists/{id}'
47+
resource = Gist
48+
body_schema = {
49+
'schema': ('description', 'public', 'files'),
50+
'required': (),
51+
}
52+
53+
54+
class Star(Request):
55+
56+
uri = 'gists/{id}/star'
57+
58+
59+
class Unstar(Request):
60+
61+
uri = 'gists/{id}/star'
62+
63+
64+
class Is_starred(Request):
65+
66+
uri = 'gists/{id}/star'
67+
68+
69+
class Fork(Request):
70+
71+
uri = 'gists/{id}/fork'
72+
resource = Gist
73+
74+
75+
class Delete(Request):
76+
77+
uri = 'gists/{id}'
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
6+
7+
class Gist(Service):
8+
""" Consume `Gists API <http://developer.github.com/v3/gists>`_ """
9+
10+
def __init__(self, **config):
11+
super(Gist, self).__init__(**config)
12+
13+
def list(self, user=None):
14+
""" Get user's gists
15+
16+
:param str user: Username
17+
:returns: A :doc:`result`
18+
19+
If you call it without user and you are authenticated, get the
20+
authenticated user's gists. but if you aren't authenticated get the
21+
public gists
22+
23+
::
24+
25+
gist_service.list('copitux')
26+
gist_service.list()
27+
"""
28+
request = self.request_builder('gists.list', user=user)
29+
return self._get_result(request)
30+
31+
def public(self):
32+
""" Get public gists
33+
34+
:returns: A :doc:`result`
35+
36+
.. note ::
37+
Be careful iterating the result
38+
"""
39+
request = self.request_builder('gists.public')
40+
return self._get_result(request)
41+
42+
def starred(self):
43+
""" Get authenticated user's starred gists
44+
45+
:returns: A :doc:`result`
46+
47+
.. warning::
48+
You must be authenticated
49+
"""
50+
request = self.request_builder('gists.starred')
51+
return self._get_result(request)
52+
53+
def get(self, id):
54+
""" Get a single gist
55+
56+
:param int id: Gist id
57+
"""
58+
request = self.request_builder('gists.get', id=id)
59+
return self._get(request)
60+
61+
def create(self, data):
62+
""" Create a gist
63+
64+
:param dict data: Input. See `github gists doc`_
65+
66+
::
67+
68+
gist_service.create(dict(description='some gist', public=True,
69+
files={'xample.py': {'content': 'import code'}}))
70+
"""
71+
request = self.request_builder('gists.create', body=data)
72+
return self._post(request)
73+
74+
def update(self, id, data):
75+
""" Update a single gist
76+
77+
:param int id: Gist id
78+
:param dict data: Input. See `github gists doc`_
79+
80+
.. warning ::
81+
You must be authenticated
82+
83+
::
84+
85+
gist_service.update(dict(description='edited',
86+
files={'xample.py': {
87+
'filename': 'new_xample.py',
88+
'content': 'import new_code'}}))
89+
"""
90+
request = self.request_builder('gists.update', id=id, body=data)
91+
return self._patch(request)
92+
93+
def star(self, id):
94+
""" Star a gist
95+
96+
:param int id: Gist id
97+
"""
98+
request = self.request_builder('gists.star', id=id)
99+
self._put(request)
100+
101+
def unstar(self, id):
102+
""" Unstar a gist
103+
104+
:param int id: Gist id
105+
"""
106+
request = self.request_builder('gists.unstar', id=id)
107+
return self._delete(request)
108+
109+
def is_starred(self, id):
110+
""" Check if a gist is starred
111+
112+
:param int id: Gist id
113+
"""
114+
request = self.request_builder('gists.is_starred', id=id)
115+
return self._bool(request)
116+
117+
def fork(self, id):
118+
""" Fork a gist
119+
120+
:param int id: Gist id
121+
"""
122+
123+
request = self.request_builder('gists.fork', id=id)
124+
return self._post(request)
125+
126+
def delete(self, id):
127+
""" Delete a gist
128+
129+
:param int id: Gist id
130+
"""
131+
request = self.request_builder('gists.delete', id=id)
132+
return self._delete(request)

pygithub3/tests/services/test_gists.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ def test_LIST_with_user(self, request_method):
3434

3535
def test_LIST_public(self, request_method):
3636
request_method.return_value = mock_response_result()
37-
self.gs.list_public().all()
37+
self.gs.public().all()
3838
self.assertEqual(request_method.call_args[0],
3939
('get', _('gists/public')))
4040

4141
def test_LIST_starred(self, request_method):
4242
request_method.return_value = mock_response_result()
43-
self.gs.list_starred.all()
43+
self.gs.starred().all()
4444
self.assertEqual(request_method.call_args[0],
4545
('get', _('gists/starred')))
4646

@@ -78,7 +78,7 @@ def test_IS_STARRED(self, request_method):
7878
request_method.return_value = mock_response()
7979
self.gs.is_starred(1)
8080
self.assertEqual(request_method.call_args[0],
81-
('get', _('gists/1/star')))
81+
('head', _('gists/1/star')))
8282

8383
def test_FORK(self, request_method):
8484
request_method.return_value = mock_response('post')

0 commit comments

Comments
 (0)