diff options
Diffstat (limited to '')
-rw-r--r-- | pygithub3/services/repos.py | 233 | ||||
-rw-r--r-- | pygithub3/services/repos/__init__.py | 190 | ||||
-rw-r--r-- | pygithub3/services/repos/collaborators.py | 71 | ||||
-rw-r--r-- | pygithub3/services/repos/commits.py | 156 | ||||
-rw-r--r-- | pygithub3/services/repos/downloads.py | 94 | ||||
-rw-r--r-- | pygithub3/services/repos/forks.py | 52 | ||||
-rw-r--r-- | pygithub3/services/repos/keys.py | 95 | ||||
-rw-r--r-- | pygithub3/services/repos/watchers.py | 91 |
8 files changed, 749 insertions, 233 deletions
diff --git a/pygithub3/services/repos.py b/pygithub3/services/repos.py deleted file mode 100644 index b20d317..0000000 --- a/pygithub3/services/repos.py +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/env python -# -*- encoding: utf-8 -*- - -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): - request = self.make_request('repos.keys.list', user=user, repo=repo) - return self._get_result(request) - - def get(self, id, user=None, repo=None): - request = self.make_request('repos.keys.get', - id=id, user=user, repo=repo) - return self._get(request) - - def create(self, data, user=None, repo=None): - request = self.make_request('repos.keys.create', - body=data, user=user, repo=repo) - return self._post(request) - - def update(self, id, data, user=None, repo=None): - request = self.make_request('repos.keys.update', - id=id, body=data, user=user, repo=repo) - return self._patch(request) - - def delete(self, id, user=None, repo=None): - request = self.make_request('repos.keys.delete', - id=id, user=user, repo=repo) - self._delete(request) - - -class Forks(Service): - - def list(self, user=None, repo=None, sort='newest'): - request = self.make_request('repos.forks.list', user=user, repo=repo) - return self._get_result(request, sort=sort) - - def create(self, user=None, repo=None, org=None): - request = self.make_request('repos.forks.create', user=user, repo=repo) - org = {'org': org} if org else {} - return self._post(request, **org) - - -class Downloads(Service): - - def list(self, user=None, repo=None): - request = self.make_request('repos.downloads.list', - user=user, repo=repo) - return self._get_result(request) - - def get(self, id, user=None, repo=None): - request = self.make_request('repos.downloads.get', - id=id, user=user, repo=repo) - return self._get(request) - - def create(self, data, user=None, repo=None): - request = self.make_request('repos.downloads.create', - body=data, user=user, repo=repo) - download = self._post(request) - - # TODO: improve it. e.g Manage all with file desc - def upload(file_path): - body = download.ball_to_upload() - body['file'] = (file_path, open(file_path, 'rb')) - return requests.post(download.s3_url, files=body) - - download.upload = upload - return download - - def delete(self, id=id, user=None, repo=None): - request = self.make_request('repos.downloads.delete', - id=id, user=user, repo=repo) - self._delete(request) - - -class Commits(Service, MimeTypeMixin): - - """ TODO: Pagination structure differs from usual - def list(self, user=None, repo=None, sha='', path=''): - request = self.make_request('repos.commits.list', user=user, repo=repo) - return self._get_result(request, sha=sha, path=path) - """ - - def get(self, sha, user=None, repo=None): - request = self.make_request('repos.commits.get', - sha=sha, user=user, repo=repo) - return self._get(request) - - def list_comments(self, sha=None, user=None, repo=None): - request = self.make_request('repos.commits.list_comments', - sha=sha, user=user, repo=repo) - return self._get_result(request, **self._get_mimetype_as_header()) - - def create_comment(self, data, sha, user=None, repo=None): - request = self.make_request('repos.commits.create_comment', - sha=sha, user=user, repo=repo, body=data) - return self._post(request, **self._get_mimetype_as_header()) - - def get_comment(self, cid, user=None, repo=None): - request = self.make_request('repos.commits.get_comment', - comment_id=cid, user=user, repo=repo) - return self._get(request, **self._get_mimetype_as_header()) - - def update_comment(self, data, cid, user=None, repo=None): - request = self.make_request('repos.commits.update_comment', - comment_id=cid, user=user, repo=repo, body=data) - return self._patch(request, **self._get_mimetype_as_header()) - - def compare(self, base, head, user=None, repo=None): - request = self.make_request('repos.commits.compare', - base=base, head=head, user=user, repo=repo) - return self._get(request) - - def delete_comment(self, cid, user=None, repo=None): - request = self.make_request('repos.commits.delete_comment', - comment_id=cid, user=user, repo=repo) - self._delete(request) - - -class Collaborator(Service): - - def list(self, user=None, repo=None): - request = self.make_request('repos.collaborators.list', - user=user, repo=repo) - return self._get_result(request) - - def add(self, collaborator, user=None, repo=None): - request = self.make_request('repos.collaborators.add', - collaborator=collaborator, user=user, repo=repo) - return self._put(request) - - def is_collaborator(self, collaborator, user=None, repo=None): - request = self.make_request('repos.collaborators.is_collaborator', - collaborator=collaborator, user=user, repo=repo) - return self._bool(request) - - def delete(self, collaborator, user=None, repo=None): - request = self.make_request('repos.collaborators.delete', - collaborator=collaborator, user=user, repo=repo) - self._delete(request) - - -class Repo(Service): - - def __init__(self, **config): - self.collaborators = Collaborator(**config) - self.commits = Commits(**config) - 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'): - request = self.make_request('repos.list', user=user) - return self._get_result(request, type=type) - - def list_by_org(self, org, type='all'): - request = self.make_request('repos.list_by_org', org=org) - return self._get_result(request, type=type) - - def create(self, data, in_org=None): - request = self.make_request('repos.create', org=in_org, body=data) - return self._post(request) - - def get(self, user=None, repo=None): - request = self.make_request('repos.get', user=user, repo=repo) - return self._get(request) - - def update(self, data, user=None, repo=None): - request = self.make_request('repos.update', body=data, - user=user, repo=repo) - return self._patch(request) - - def __list_contributors(self, user=None, repo=None, **kwargs): - request = self.make_request('repos.list_contributors', - user=user, repo=repo) - return self._get_result(request, **kwargs) - - def list_contributors(self, user=None, repo=None): - return self.__list_contributors(user, repo) - - def list_contributors_with_anonymous(self, user=None, repo=None): - return self.__list_contributors(user, repo, anom=True) - - def list_languages(self, user=None, repo=None): - request = self.make_request('repos.list_languages', - user=user, repo=repo) - return self._get(request) - - def list_teams(self, user=None, repo=None): - request = self.make_request('repos.list_teams', user=user, repo=repo) - return self._get_result(request) - - def list_tags(self, user=None, repo=None): - request = self.make_request('repos.list_tags', user=user, repo=repo) - return self._get_result(request) - - def list_branches(self, user=None, repo=None): - request = self.make_request('repos.list_branches', - user=user, repo=repo) - return self._get_result(request) diff --git a/pygithub3/services/repos/__init__.py b/pygithub3/services/repos/__init__.py new file mode 100644 index 0000000..484dd49 --- /dev/null +++ b/pygithub3/services/repos/__init__.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from ..base import Service, MimeTypeMixin +from .collaborators import Collaborators +from .commits import Commits +from .downloads import Downloads +from .forks import Forks +from .keys import Keys +from .watchers import Watchers + + +class Repos(Service): + """ Consume `Repos API <http://developer.github.com/v3/repos>`_ """ + + def __init__(self, **config): + self.collaborators = Collaborators(**config) + self.commits = Commits(**config) + self.downloads = Downloads(**config) + self.forks = Forks(**config) + self.keys = Keys(**config) + self.watchers = Watchers(**config) + super(Repos, self).__init__(**config) + + def list(self, user=None, type='all'): + """ Get user's repositories + + :param str user: Username + :param str type: Filter by type (optional). See `github repos doc`_ + :returns: A :doc:`result` + + If you call it without user and you are authenticated, get the + authenticated user's repositories + + .. warning:: + If you aren't authenticated and call without user, it returns 403 + + :: + + repo_service.list('copitux', type='owner') + repo_service.list(type='private') + """ + request = self.make_request('repos.list', user=user) + return self._get_result(request, type=type) + + def list_by_org(self, org, type='all'): + """ Get organization's repositories + + :param str org: Organization name + :param str type: Filter by type (optional). See `github repos doc`_ + :returns: A :doc:`result` + + :: + + repo_service.list_by_org('myorganization', type='member') + """ + request = self.make_request('repos.list_by_org', org=org) + return self._get_result(request, type=type) + + def create(self, data, in_org=None): + """ Create a new repository + + :param dict data: Input. See `github repos doc`_ + :param str in_org: Organization where create the repository (optional) + + .. warning:: + + You must be authenticated + + If you use ``in_org`` arg, the authenticated user must be a member + of <in_org> + + :: + + repo_service.create(dict(name='new_repo', description='desc')) + repo_service.create(dict(name='new_repo_in_org', team_id=2300), + in_org='myorganization') + """ + request = self.make_request('repos.create', org=in_org, body=data) + return self._post(request) + + def get(self, user=None, repo=None): + """ Get a single repo + + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.get', user=user, repo=repo) + return self._get(request) + + def update(self, data, user=None, repo=None): + """ Update a single repository + + :param dict data: Input. See `github repos doc`_ + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + + :: + + repo_service.update(dict(has_issues=True), user='octocat', + repo='oct_repo') + """ + request = self.make_request('repos.update', body=data, + user=user, repo=repo) + return self._patch(request) + + def __list_contributors(self, user=None, repo=None, **kwargs): + request = self.make_request('repos.list_contributors', + user=user, repo=repo) + return self._get_result(request, **kwargs) + + def list_contributors(self, user=None, repo=None): + """ Get repository's contributors + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + return self.__list_contributors(user, repo) + + def list_contributors_with_anonymous(self, user=None, repo=None): + """ Like :attr:`~pygithub3.services.repos.Repos.list_contributors` plus + anonymous """ + return self.__list_contributors(user, repo, anom=True) + + def list_languages(self, user=None, repo=None): + """ Get repository's languages + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.list_languages', + user=user, repo=repo) + return self._get(request) + + def list_teams(self, user=None, repo=None): + """ Get repository's teams + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.list_teams', user=user, repo=repo) + return self._get_result(request) + + def list_tags(self, user=None, repo=None): + """ Get repository's tags + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.list_tags', user=user, repo=repo) + return self._get_result(request) + + def list_branches(self, user=None, repo=None): + """ Get repository's branches + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.list_branches', + user=user, repo=repo) + return self._get_result(request) diff --git a/pygithub3/services/repos/collaborators.py b/pygithub3/services/repos/collaborators.py new file mode 100644 index 0000000..f80a406 --- /dev/null +++ b/pygithub3/services/repos/collaborators.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Service + + +class Collaborators(Service): + """ Consume `Repo Collaborators API + <http://developer.github.com/v3/repos/collaborators>`_ """ + + def list(self, user=None, repo=None): + """ Get repository's collaborators + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.collaborators.list', + user=user, repo=repo) + return self._get_result(request) + + def add(self, collaborator, user=None, repo=None): + """ Add collaborator to a repository + + :param str collaborator: Collaborator's username + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated and have perms in repository + """ + request = self.make_request('repos.collaborators.add', + collaborator=collaborator, user=user, repo=repo) + return self._put(request) + + def is_collaborator(self, collaborator, user=None, repo=None): + """ Check if a user is collaborator on repository + + :param str collaborator: Collaborator's username + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.collaborators.is_collaborator', + collaborator=collaborator, user=user, repo=repo) + return self._bool(request) + + def delete(self, collaborator, user=None, repo=None): + """ Remove collaborator from repository + + :param str collaborator: Collaborator's username + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated and have perms in repository + """ + request = self.make_request('repos.collaborators.delete', + collaborator=collaborator, user=user, repo=repo) + self._delete(request) diff --git a/pygithub3/services/repos/commits.py b/pygithub3/services/repos/commits.py new file mode 100644 index 0000000..8eec3e7 --- /dev/null +++ b/pygithub3/services/repos/commits.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Service, MimeTypeMixin + + +class Commits(Service, MimeTypeMixin): + """ Consume `Commits API + <http://developer.github.com/v3/repos/commits>`_ + + .. note:: + This service support :ref:`mimetypes` configuration + """ + + #TODO: Pagination structure differs from usual + #def list(self, user=None, repo=None, sha='', path=''): + #request = self.make_request('repos.commits.list', user=user, repo=repo) + #return self._get_result(request, sha=sha, path=path) + + def get(self, sha, user=None, repo=None): + """ Get a single commit + + :param str sha: Commit's sha + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.commits.get', + sha=sha, user=user, repo=repo) + return self._get(request) + + def list_comments(self, sha=None, user=None, repo=None): + """ Get commit's comments + + :param str sha: Commit's sha + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + + If you call it without ``sha``, get all commit's comments of a + repository + :: + + commits_service.list_comments('6dcb09', user='octocat', + repo='oct_repo') + commits_service.list_comments(user='octocat', repo='oct_repo') + """ + request = self.make_request('repos.commits.list_comments', + sha=sha, user=user, repo=repo) + return self._get_result(request, **self._get_mimetype_as_header()) + + def create_comment(self, data, sha, user=None, repo=None): + """ Create a commit comment + + :param dict data: Input. See `github commits doc`_ + :param str sha: Commit's sha + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + + :: + + data = { + "body": "Nice change", + "commit_id": "6dcb09b5b57875f334f61aebed695e2e4193db5e", + "line": 1, + "path": "file1.txt", + "position": 4 + } + commits_service.create_comment(data, '6dcb09', user='octocat', + repo='oct_repo') + """ + request = self.make_request('repos.commits.create_comment', + sha=sha, user=user, repo=repo, body=data) + return self._post(request, **self._get_mimetype_as_header()) + + def get_comment(self, cid, user=None, repo=None): + """ Get a single commit comment + + :param int cid: Commit comment id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.commits.get_comment', + comment_id=cid, user=user, repo=repo) + return self._get(request, **self._get_mimetype_as_header()) + + def update_comment(self, data, cid, user=None, repo=None): + """ Update a single commit comment + + :param dict data: Input. See `github commits doc`_ + :param int cid: Commit comment id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + + :: + + commits_service.update_comment(dict(body='nice change'), 42, + user='octocat', repo='oct_repo') + """ + request = self.make_request('repos.commits.update_comment', + comment_id=cid, user=user, repo=repo, body=data) + return self._patch(request, **self._get_mimetype_as_header()) + + def compare(self, base, head, user=None, repo=None): + """ Compare two commits + + :param str base: Base commit sha + :param str head: Head commit sha + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + :: + + commits_service.compare('6dcb09', 'master', user='octocat', + repo='oct_repo') + """ + request = self.make_request('repos.commits.compare', + base=base, head=head, user=user, repo=repo) + return self._get(request) + + def delete_comment(self, cid, user=None, repo=None): + """ Delete a single commit comment + + :param int cid: Commit comment id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.commits.delete_comment', + comment_id=cid, user=user, repo=repo) + self._delete(request) diff --git a/pygithub3/services/repos/downloads.py b/pygithub3/services/repos/downloads.py new file mode 100644 index 0000000..47c7785 --- /dev/null +++ b/pygithub3/services/repos/downloads.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +import requests + +from . import Service + + +class Downloads(Service): + """ Consume `Downloads API + <http://developer.github.com/v3/repos/downloads>`_ """ + + def list(self, user=None, repo=None): + """ Get repository's downloads + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.downloads.list', + user=user, repo=repo) + return self._get_result(request) + + def get(self, id, user=None, repo=None): + """ Get a single download + + :param int id: Download id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.downloads.get', + id=id, user=user, repo=repo) + return self._get(request) + + def create(self, data, user=None, repo=None): + """ Create a new download + + :param dict data: Input. See `github downloads doc`_ + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + It is a two step process. After you create the download, you must + call the ``upload`` function of ``Download`` resource with + ``file_path`` + + .. warning:: + In `alpha` state + + :: + + # Step 1 + download = downloads_service.create( + dict(name='new_download', size=1130), + user='octocat', repo='oct_repo') + + # Step 2 + download.upload('/home/user/file.ext') + """ + request = self.make_request('repos.downloads.create', + body=data, user=user, repo=repo) + download = self._post(request) + + # TODO: improve it. e.g Manage all with file desc + def upload(file_path): + """ """ + body = download.ball_to_upload() + body['file'] = (file_path, open(file_path, 'rb')) + return requests.post(download.s3_url, files=body) + + download.upload = upload + return download + + def delete(self, id, user=None, repo=None): + """ Delete a download + + :param int id: Download id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.downloads.delete', + id=id, user=user, repo=repo) + self._delete(request) diff --git a/pygithub3/services/repos/forks.py b/pygithub3/services/repos/forks.py new file mode 100644 index 0000000..df51347 --- /dev/null +++ b/pygithub3/services/repos/forks.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Service + + +class Forks(Service): + """ Consume `Forks API + <http://developer.github.com/v3/repos/forks>`_ """ + + def list(self, user=None, repo=None, sort='newest'): + """ Get repository's forks + + :param str user: Username + :param str repo: Repository + :param str sort: Order resources (optional). See `github forks doc`_ + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + + :: + + forks_service.list(user='octocat', repo='oct_repo', sort='oldest') + """ + request = self.make_request('repos.forks.list', user=user, repo=repo) + return self._get_result(request, sort=sort) + + def create(self, user=None, repo=None, org=None): + """ Fork a repository + + :param str user: Username + :param str repo: Repository + :param str org: Organization name (optional) + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + + If you call it with ``org``, the repository will be forked into this + organization. + :: + + forks_service.create(user='octocat', repo='oct_repo') + forks_service.create(user='octocat', repo='oct_repo', + org='myorganization' + """ + request = self.make_request('repos.forks.create', user=user, repo=repo) + org = org and {'org': org} or {} + return self._post(request, **org) diff --git a/pygithub3/services/repos/keys.py b/pygithub3/services/repos/keys.py new file mode 100644 index 0000000..1ade8a1 --- /dev/null +++ b/pygithub3/services/repos/keys.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Service + + +class Keys(Service): + """ Consume `Deploy keys API + <http://developer.github.com/v3/repos/keys>`_ """ + + def list(self, user=None, repo=None): + """ Get repository's keys + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.keys.list', user=user, repo=repo) + return self._get_result(request) + + def get(self, id, user=None, repo=None): + """ Get a single repository key + + :param int id: Repository key id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.keys.get', + id=id, user=user, repo=repo) + return self._get(request) + + def create(self, data, user=None, repo=None): + """ Create a repository key + + :param dict data: Input. See `github keys doc`_ + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated and have perms in the repository + + :: + + keys_service.create(dict(title='new key', key='ssh-rsa AAA...'), + user='octocat', repo='oct_repo') + """ + request = self.make_request('repos.keys.create', + body=data, user=user, repo=repo) + return self._post(request) + + def update(self, id, data, user=None, repo=None): + """ Update a repository key + + :param int id: Repository key id + :param dict data: Input. See `github keys doc`_ + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated and have perms in the repository + + :: + + keys_service.update(42, dict(title='new title'), + user='octocat', repo='oct_repo') + """ + request = self.make_request('repos.keys.update', + id=id, body=data, user=user, repo=repo) + return self._patch(request) + + def delete(self, id, user=None, repo=None): + """ Delete a repository key + + :param int id: Repository key id + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.keys.delete', + id=id, user=user, repo=repo) + self._delete(request) diff --git a/pygithub3/services/repos/watchers.py b/pygithub3/services/repos/watchers.py new file mode 100644 index 0000000..7bcede5 --- /dev/null +++ b/pygithub3/services/repos/watchers.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Service + + +class Watchers(Service): + """ Consume `Watching API + <http://developer.github.com/v3/repos/watching>`_ """ + + def list(self, user=None, repo=None): + """ Get repository's watchers + + :param str user: Username + :param str repo: Repository + :returns: A :doc:`result` + + .. note:: + Remember :ref:`config precedence` + """ + request = self.make_request('repos.watchers.list', + user=user, repo=repo) + return self._get_result(request) + + def list_repos(self, user=None): + """ Get repositories being watched by a user + + :param str user: Username + :returns: A :doc:`result` + + If you call it without user and you are authenticated, get the + repositories being watched by the authenticated user. + + .. warning:: + If you aren't authenticated and call without user, it returns 403 + + :: + + watchers_service.list_repos('copitux') + watchers_service.list_repos() + """ + request = self.make_request('repos.watchers.list_repos', user=user) + return self._get_result(request) + + def is_watching(self, user=None, repo=None): + """ Check if authenticated user is watching a repository + + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + """ + request = self.make_request('repos.watchers.is_watching', + user=user, repo=repo) + return self._bool(request) + + def watch(self, user=None, repo=None): + """ Watch a repository + + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + """ + request = self.make_request('repos.watchers.watch', + user=user, repo=repo) + self._put(request) + + def unwatch(self, user=None, repo=None): + """ Stop watching a repository + + :param str user: Username + :param str repo: Repository + + .. note:: + Remember :ref:`config precedence` + + .. warning:: + You must be authenticated + """ + request = self.make_request('repos.watchers.unwatch', + user=user, repo=repo) + self._delete(request) |