Skip to content

Commit bb52626

Browse files
committed
Complete AuthGist handler
1 parent 5eae4fd commit bb52626

File tree

2 files changed

+151
-5
lines changed

2 files changed

+151
-5
lines changed

github3/handlers/gists.py

Lines changed: 89 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,93 @@ def get_comment(self, comment_id):
5353

5454
class AuthGist(Gist):
5555

56-
def create_gist(self, description, public=True, files={}):
57-
""" Create a gist """
58-
data = {'description': description,
59-
'public': public,
60-
'files': files}
56+
def all_gists(self, limit=None):
57+
""" Return all public gists
58+
59+
NOTE: It returns all gists in github environment. Maybe you
60+
want to use `limit` parameter
61+
"""
62+
63+
return self._get_resources('public', model=models.Gist, limit=limit)
64+
65+
def my_gists(self, limit=None):
66+
""" Return authenticated user's gists
67+
68+
param `limit`: Number of gists
69+
"""
70+
71+
return self._get_resources('', model=models.Gist, limit=limit)
72+
73+
def my_starred_gists(self, limit=None):
74+
""" Return authenticated user's starred gists
75+
76+
param `limit`: Number of gists
77+
"""
78+
79+
return self._get_resources('starred', model=models.Gist, limit=limit)
80+
81+
def create_gist(self, is_public, files, desc=None):
82+
""" Create and return a gist """
83+
84+
data = {
85+
'public': bool(is_public),
86+
'files': files, # TODO: Issue #1
87+
'desc': desc or '',
88+
}
6189
return self._post_resource('', data=data, model=models.Gist)
90+
91+
def star_gist(self, gist_id):
92+
""" Star a gist
93+
94+
param `gist_id`: Gist id to star
95+
"""
96+
97+
return self._put('%s/star' % gist_id)
98+
99+
def unstar_gist(self, gist_id):
100+
""" Unstar a gist
101+
102+
param `gist_id`: Gist id to unstar
103+
"""
104+
105+
return self._delete('%s/star' % gist_id)
106+
107+
def is_starred(self, gist_id):
108+
""" True if gist is starred
109+
110+
param `gist_id`: Gist id
111+
"""
112+
113+
return self._bool('%s/star' % gist_id)
114+
115+
def fork_gist(self, gist_id):
116+
""" Return forked gist from id
117+
118+
param `gist_id`: Gist id to be forked...
119+
"""
120+
121+
return self._post_resource('%s/fork' % gist_id, data=None,
122+
model=models.Gist)
123+
124+
def delete_gist(self, gist_id):
125+
""" Delete the gist
126+
127+
param `gist_id`: Gist id
128+
"""
129+
130+
return self._delete(str(gist_id))
131+
132+
def create_comment(self, gist_id, comment):
133+
""" Create comment into gist """
134+
135+
data = {'body': comment}
136+
return self._post_resource('%s/comments' % gist_id, data=data,
137+
model=models.GistComment)
138+
139+
def delete_comment(self, comment_id):
140+
""" Delete comment
141+
142+
param `comment_id`: Comment id
143+
"""
144+
145+
return self._delete('comments/%s' % comment_id)

github3/tests/gists_handler_test.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def test_get_comment(self, get):
3535
comment = self.handler.get_comment(1)
3636
get.assert_called_with('comments/1', model=GistComment, headers=None)
3737

38+
3839
class TestAuthGistHandler(TestCase):
3940

4041
def setUp(self):
@@ -46,3 +47,64 @@ def test_inherit(self):
4647
self.assertTrue(hasattr(self.handler, 'get_comments'))
4748
self.assertTrue(hasattr(self.handler, 'get_comment'))
4849

50+
@patch.object(Handler, '_get_resources')
51+
def test_all_gists(self, get):
52+
gists = self.handler.all_gists()
53+
get.assert_called_with('public', model=Gist, limit=None)
54+
55+
@patch.object(Handler, '_get_resources')
56+
def test_my_gists(self, get):
57+
gists = self.handler.my_gists()
58+
get.assert_called_with('', model=Gist, limit=None)
59+
60+
@patch.object(Handler, '_get_resources')
61+
def test_my_starred_gists(self, get):
62+
gists = self.handler.my_starred_gists()
63+
get.assert_called_with('starred', model=Gist, limit=None)
64+
65+
@patch.object(Handler, '_post_resource')
66+
def test_create_gist(self, post):
67+
data = {
68+
'public': False,
69+
'files': {'file': {'contents': 'file_data'}},
70+
'desc': 'some'
71+
}
72+
gist = self.handler.create_gist(data['public'], data['files'],
73+
data['desc'])
74+
post.assert_called_with('', data=data, model=Gist)
75+
76+
@patch.object(Handler, '_put')
77+
def test_star_gist(self, put):
78+
boolean = self.handler.star_gist(1)
79+
put.assert_called_with('1/star')
80+
81+
@patch.object(Handler, '_delete')
82+
def test_unstar_gist(self, delete):
83+
boolean = self.handler.unstar_gist(1)
84+
delete.assert_callted_with('1/star')
85+
86+
@patch.object(Handler, '_bool')
87+
def test_is_starred(self, bool):
88+
boolean = self.handler.is_starred(1)
89+
bool.assert_called_with('1/star')
90+
91+
@patch.object(Handler, '_post_resource')
92+
def test_fork_gist(self, post):
93+
gist = self.handler.fork_gist(1)
94+
post.assert_called_with('1/fork', data=None, model=Gist)
95+
96+
@patch.object(Handler, '_delete')
97+
def test_delete_gist(self, delete):
98+
boolean = self.handler.delete_gist(1)
99+
delete.assert_called_with('1')
100+
101+
@patch.object(Handler, '_post_resource')
102+
def test_create_comment(self, post):
103+
gist_comment = self.handler.create_comment(1, 'comment')
104+
post.assert_called_with('1/comments', data={'body': 'comment'},
105+
model=GistComment)
106+
107+
@patch.object(Handler, '_delete')
108+
def test_delete_comment(self, delete):
109+
boolean = self.handler.delete_comment(1)
110+
delete.assert_called_with('comments/1')

0 commit comments

Comments
 (0)