aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3')
-rw-r--r--pygithub3/requests/repos/watchers.py37
-rw-r--r--pygithub3/services/repos.py28
-rw-r--r--pygithub3/tests/services/test_repos.py45
3 files changed, 109 insertions, 1 deletions
diff --git a/pygithub3/requests/repos/watchers.py b/pygithub3/requests/repos/watchers.py
new file mode 100644
index 0000000..46e01d7
--- /dev/null
+++ b/pygithub3/requests/repos/watchers.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request
+from pygithub3.resources.users import User
+from pygithub3.resources.repos import Repo
+
+
+class List(Request):
+
+ uri = 'repos/{user}/{repo}/watchers'
+ resource = User
+
+
+class List_repos(Request):
+
+ uri = 'users/{user}/watched'
+ resource = Repo
+
+ def clean_uri(self):
+ if not self.user:
+ return 'user/watched'
+
+
+class Is_watching(Request):
+
+ uri = 'user/watched/{user}/{repo}'
+
+
+class Watch(Request):
+
+ uri = 'user/watched/{user}/{repo}'
+
+
+class Unwatch(Request):
+
+ uri = 'user/watched/{user}/{repo}'
diff --git a/pygithub3/services/repos.py b/pygithub3/services/repos.py
index c37f21e..b20d317 100644
--- a/pygithub3/services/repos.py
+++ b/pygithub3/services/repos.py
@@ -6,6 +6,33 @@ import requests
from .base import Service, MimeTypeMixin
+class Watchers(Service):
+
+ def list(self, user=None, repo=None):
+ request = self.make_request('repos.watchers.list',
+ user=user, repo=repo)
+ return self._get_result(request)
+
+ def list_repos(self, user=None):
+ request = self.make_request('repos.watchers.list_repos', user=user)
+ return self._get_result(request)
+
+ def is_watching(self, user=None, repo=None):
+ request = self.make_request('repos.watchers.is_watching',
+ user=user, repo=repo)
+ return self._bool(request)
+
+ def watch(self, user=None, repo=None):
+ request = self.make_request('repos.watchers.watch',
+ user=user, repo=repo)
+ self._put(request)
+
+ def unwatch(self, user=None, repo=None):
+ request = self.make_request('repos.watchers.unwatch',
+ user=user, repo=repo)
+ self._delete(request)
+
+
class Keys(Service):
def list(self, user=None, repo=None):
@@ -152,6 +179,7 @@ class Repo(Service):
self.downloads = Downloads(**config)
self.forks = Forks(**config)
self.keys = Keys(**config)
+ self.watchers = Watchers(**config)
super(Repo, self).__init__(**config)
def list(self, user=None, type='all'):
diff --git a/pygithub3/tests/services/test_repos.py b/pygithub3/tests/services/test_repos.py
index cc8c286..6f4ed71 100644
--- a/pygithub3/tests/services/test_repos.py
+++ b/pygithub3/tests/services/test_repos.py
@@ -7,7 +7,7 @@ import requests
from mock import patch, Mock
from pygithub3.services.repos import (Repo, Collaborator, Commits, Downloads,
- Forks, Keys)
+ Forks, Keys, Watchers)
from pygithub3.resources.base import json
from pygithub3.tests.utils.base import (mock_response, mock_response_result,
mock_json)
@@ -325,3 +325,46 @@ class TestKeysService(TestCase):
self.ks.delete(1)
self.assertEqual(request_method.call_args[0],
('delete', _('repos/oct/re_oct/keys/1')))
+
+
+@patch.object(requests.sessions.Session, 'request')
+class TestWatchersService(TestCase):
+
+ def setUp(self):
+ self.ws = Watchers(user='oct', repo='re_oct')
+
+ def test_LIST(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.ws.list().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/oct/re_oct/watchers')))
+
+ def test_LIST_repos(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.ws.list_repos().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('users/oct/watched')))
+
+ def test_LIST_repos_without_user(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.ws.set_user(None)
+ self.ws.list_repos().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('user/watched')))
+
+ def test_IS_watching(self, request_method):
+ request_method.return_value = mock_response()
+ self.assertTrue(self.ws.is_watching())
+ self.assertEqual(request_method.call_args[0],
+ ('head', _('user/watched/oct/re_oct')))
+
+ def test_WATCH(self, request_method):
+ self.ws.watch()
+ self.assertEqual(request_method.call_args[0],
+ ('put', _('user/watched/oct/re_oct')))
+
+ def test_UNWATCH(self, request_method):
+ request_method.return_value = mock_response('delete')
+ self.ws.unwatch()
+ self.assertEqual(request_method.call_args[0],
+ ('delete', _('user/watched/oct/re_oct')))