Skip to content

Commit 5a2e051

Browse files
committed
Repos.watchers service done
1 parent 7d1c429 commit 5a2e051

File tree

3 files changed

+109
-1
lines changed

3 files changed

+109
-1
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from . import Request
5+
from pygithub3.resources.users import User
6+
from pygithub3.resources.repos import Repo
7+
8+
9+
class List(Request):
10+
11+
uri = 'repos/{user}/{repo}/watchers'
12+
resource = User
13+
14+
15+
class List_repos(Request):
16+
17+
uri = 'users/{user}/watched'
18+
resource = Repo
19+
20+
def clean_uri(self):
21+
if not self.user:
22+
return 'user/watched'
23+
24+
25+
class Is_watching(Request):
26+
27+
uri = 'user/watched/{user}/{repo}'
28+
29+
30+
class Watch(Request):
31+
32+
uri = 'user/watched/{user}/{repo}'
33+
34+
35+
class Unwatch(Request):
36+
37+
uri = 'user/watched/{user}/{repo}'

pygithub3/services/repos.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,33 @@
66
from .base import Service, MimeTypeMixin
77

88

9+
class Watchers(Service):
10+
11+
def list(self, user=None, repo=None):
12+
request = self.make_request('repos.watchers.list',
13+
user=user, repo=repo)
14+
return self._get_result(request)
15+
16+
def list_repos(self, user=None):
17+
request = self.make_request('repos.watchers.list_repos', user=user)
18+
return self._get_result(request)
19+
20+
def is_watching(self, user=None, repo=None):
21+
request = self.make_request('repos.watchers.is_watching',
22+
user=user, repo=repo)
23+
return self._bool(request)
24+
25+
def watch(self, user=None, repo=None):
26+
request = self.make_request('repos.watchers.watch',
27+
user=user, repo=repo)
28+
self._put(request)
29+
30+
def unwatch(self, user=None, repo=None):
31+
request = self.make_request('repos.watchers.unwatch',
32+
user=user, repo=repo)
33+
self._delete(request)
34+
35+
936
class Keys(Service):
1037

1138
def list(self, user=None, repo=None):
@@ -152,6 +179,7 @@ def __init__(self, **config):
152179
self.downloads = Downloads(**config)
153180
self.forks = Forks(**config)
154181
self.keys = Keys(**config)
182+
self.watchers = Watchers(**config)
155183
super(Repo, self).__init__(**config)
156184

157185
def list(self, user=None, type='all'):

pygithub3/tests/services/test_repos.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from mock import patch, Mock
88

99
from pygithub3.services.repos import (Repo, Collaborator, Commits, Downloads,
10-
Forks, Keys)
10+
Forks, Keys, Watchers)
1111
from pygithub3.resources.base import json
1212
from pygithub3.tests.utils.base import (mock_response, mock_response_result,
1313
mock_json)
@@ -325,3 +325,46 @@ def test_DELETE(self, request_method):
325325
self.ks.delete(1)
326326
self.assertEqual(request_method.call_args[0],
327327
('delete', _('repos/oct/re_oct/keys/1')))
328+
329+
330+
@patch.object(requests.sessions.Session, 'request')
331+
class TestWatchersService(TestCase):
332+
333+
def setUp(self):
334+
self.ws = Watchers(user='oct', repo='re_oct')
335+
336+
def test_LIST(self, request_method):
337+
request_method.return_value = mock_response_result()
338+
self.ws.list().all()
339+
self.assertEqual(request_method.call_args[0],
340+
('get', _('repos/oct/re_oct/watchers')))
341+
342+
def test_LIST_repos(self, request_method):
343+
request_method.return_value = mock_response_result()
344+
self.ws.list_repos().all()
345+
self.assertEqual(request_method.call_args[0],
346+
('get', _('users/oct/watched')))
347+
348+
def test_LIST_repos_without_user(self, request_method):
349+
request_method.return_value = mock_response_result()
350+
self.ws.set_user(None)
351+
self.ws.list_repos().all()
352+
self.assertEqual(request_method.call_args[0],
353+
('get', _('user/watched')))
354+
355+
def test_IS_watching(self, request_method):
356+
request_method.return_value = mock_response()
357+
self.assertTrue(self.ws.is_watching())
358+
self.assertEqual(request_method.call_args[0],
359+
('head', _('user/watched/oct/re_oct')))
360+
361+
def test_WATCH(self, request_method):
362+
self.ws.watch()
363+
self.assertEqual(request_method.call_args[0],
364+
('put', _('user/watched/oct/re_oct')))
365+
366+
def test_UNWATCH(self, request_method):
367+
request_method.return_value = mock_response('delete')
368+
self.ws.unwatch()
369+
self.assertEqual(request_method.call_args[0],
370+
('delete', _('user/watched/oct/re_oct')))

0 commit comments

Comments
 (0)