aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3')
-rw-r--r--pygithub3/core/result.py32
-rw-r--r--pygithub3/services/base.py20
-rw-r--r--pygithub3/services/repos/__init__.py9
-rw-r--r--pygithub3/services/repos/collaborators.py6
-rw-r--r--pygithub3/services/repos/commits.py14
-rw-r--r--pygithub3/services/repos/downloads.py58
-rw-r--r--pygithub3/services/repos/forks.py37
-rw-r--r--pygithub3/services/repos/keys.py64
-rw-r--r--pygithub3/services/repos/watchers.py60
-rw-r--r--pygithub3/services/users/__init__.py1
-rw-r--r--pygithub3/services/users/emails.py2
-rw-r--r--pygithub3/services/users/followers.py4
-rw-r--r--pygithub3/services/users/keys.py1
13 files changed, 266 insertions, 42 deletions
diff --git a/pygithub3/core/result.py b/pygithub3/core/result.py
index 9e69e7d..5a2aa80 100644
--- a/pygithub3/core/result.py
+++ b/pygithub3/core/result.py
@@ -137,6 +137,38 @@ class Page(object):
class Result(object):
"""
Result is a very lazy paginator. It only do a real request when is needed
+
+ You have several ways to consume it
+
+ #. Iterating over the result::
+
+ result = some_request()
+ for page in result:
+ for resource in page:
+ print resource
+
+ #. With a generator::
+
+ result = some_request()
+ for resource in result.iterator():
+ print resource
+
+ #. As a list::
+
+ result = some_request()
+ print result.all()
+
+ #. Also you can request some page manually
+
+ .. autoattribute:: pygithub3.core.result.Result.pages
+ .. automethod:: pygithub3.core.result.Result.get_page
+
+ Each ``Page`` is an iterator and contains resources::
+
+ result = some_request()
+ assert result.pages > 3
+ page3 = result.get_page(3)
+ page3_resources = list(page3)
"""
def __init__(self, client, request, **kwargs):
diff --git a/pygithub3/services/base.py b/pygithub3/services/base.py
index 7fb6133..8602150 100644
--- a/pygithub3/services/base.py
+++ b/pygithub3/services/base.py
@@ -136,14 +136,9 @@ class Service(object):
class MimeTypeMixin(object):
"""
- Mimetype support to Services that inherit this Mixin
+ Mimetype support to Services
Adds 4 public functions to service:
-
- 1. set_raw_mimetype
- 2. set_text_mimetype
- 3. set_html_mimetype
- 4. set_full_mimetype
"""
VERSION = 'beta'
@@ -152,16 +147,21 @@ class MimeTypeMixin(object):
self.mimetype = 'application/vnd.github.%s.%s+json' % (
self.VERSION, mimetype)
- def set_raw_mimetype(self):
+ def set_raw(self):
+ """ Resource will have ``body`` attribute """
self.__set_mimetype('raw')
- def set_text_mimetype(self):
+ def set_text(self):
+ """ Resource will have ``body_text`` attribute """
self.__set_mimetype('text')
- def set_html_mimetype(self):
+ def set_html(self):
+ """ Resource will have ``body_html`` attribute """
self.__set_mimetype('html')
- def set_full_mimetype(self):
+ def set_full(self):
+ """ Resource will have ``body`` ``body_text`` and ``body_html``
+ attributes """
self.__set_mimetype('full')
def _get_mimetype_as_header(self):
diff --git a/pygithub3/services/repos/__init__.py b/pygithub3/services/repos/__init__.py
index e1ed1d8..484dd49 100644
--- a/pygithub3/services/repos/__init__.py
+++ b/pygithub3/services/repos/__init__.py
@@ -33,7 +33,6 @@ class Repos(Service):
authenticated user's repositories
.. warning::
-
If you aren't authenticated and call without user, it returns 403
::
@@ -87,7 +86,6 @@ class Repos(Service):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.get', user=user, repo=repo)
@@ -101,11 +99,9 @@ class Repos(Service):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
.. warning::
-
You must be authenticated
::
@@ -130,7 +126,6 @@ class Repos(Service):
:returns: A :doc:`result`
.. note::
-
Remember :ref:`config precedence`
"""
return self.__list_contributors(user, repo)
@@ -148,7 +143,6 @@ class Repos(Service):
:returns: A :doc:`result`
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.list_languages',
@@ -163,7 +157,6 @@ class Repos(Service):
:returns: A :doc:`result`
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.list_teams', user=user, repo=repo)
@@ -177,7 +170,6 @@ class Repos(Service):
:returns: A :doc:`result`
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.list_tags', user=user, repo=repo)
@@ -191,7 +183,6 @@ class Repos(Service):
:returns: A :doc:`result`
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.list_branches',
diff --git a/pygithub3/services/repos/collaborators.py b/pygithub3/services/repos/collaborators.py
index 5f0703a..f80a406 100644
--- a/pygithub3/services/repos/collaborators.py
+++ b/pygithub3/services/repos/collaborators.py
@@ -16,7 +16,6 @@ class Collaborators(Service):
:returns: A :doc:`result`
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.collaborators.list',
@@ -31,11 +30,9 @@ class Collaborators(Service):
: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',
@@ -50,7 +47,6 @@ class Collaborators(Service):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.collaborators.is_collaborator',
@@ -65,11 +61,9 @@ class Collaborators(Service):
: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',
diff --git a/pygithub3/services/repos/commits.py b/pygithub3/services/repos/commits.py
index 23e6842..8eec3e7 100644
--- a/pygithub3/services/repos/commits.py
+++ b/pygithub3/services/repos/commits.py
@@ -25,7 +25,6 @@ class Commits(Service, MimeTypeMixin):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.commits.get',
@@ -38,9 +37,9 @@ class Commits(Service, MimeTypeMixin):
: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
@@ -64,9 +63,11 @@ class Commits(Service, MimeTypeMixin):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
+ .. warning::
+ You must be authenticated
+
::
data = {
@@ -91,7 +92,6 @@ class Commits(Service, MimeTypeMixin):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.commits.get_comment',
@@ -107,9 +107,11 @@ class Commits(Service, MimeTypeMixin):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
+ .. warning::
+ You must be authenticated
+
::
commits_service.update_comment(dict(body='nice change'), 42,
@@ -128,7 +130,6 @@ class Commits(Service, MimeTypeMixin):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
::
@@ -148,7 +149,6 @@ class Commits(Service, MimeTypeMixin):
:param str repo: Repository
.. note::
-
Remember :ref:`config precedence`
"""
request = self.make_request('repos.commits.delete_comment',
diff --git a/pygithub3/services/repos/downloads.py b/pygithub3/services/repos/downloads.py
index c455021..47c7785 100644
--- a/pygithub3/services/repos/downloads.py
+++ b/pygithub3/services/repos/downloads.py
@@ -7,24 +7,71 @@ 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)
@@ -32,7 +79,16 @@ class Downloads(Service):
download.upload = upload
return download
- def delete(self, id=id, user=None, repo=None):
+ 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
index 09f23c5..df51347 100644
--- a/pygithub3/services/repos/forks.py
+++ b/pygithub3/services/repos/forks.py
@@ -5,13 +5,48 @@ 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': org} if org else {}
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
index 24a7cb3..1ade8a1 100644
--- a/pygithub3/services/repos/keys.py
+++ b/pygithub3/services/repos/keys.py
@@ -5,27 +5,91 @@ 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
index 8598590..7bcede5 100644
--- a/pygithub3/services/repos/watchers.py
+++ b/pygithub3/services/repos/watchers.py
@@ -5,27 +5,87 @@ 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)
diff --git a/pygithub3/services/users/__init__.py b/pygithub3/services/users/__init__.py
index c448319..29a8e1c 100644
--- a/pygithub3/services/users/__init__.py
+++ b/pygithub3/services/users/__init__.py
@@ -25,7 +25,6 @@ class User(Service):
authenticated user.
.. warning::
-
If you aren't authenticated and call without user, it returns 403
::
diff --git a/pygithub3/services/users/emails.py b/pygithub3/services/users/emails.py
index 084a29c..09f6683 100644
--- a/pygithub3/services/users/emails.py
+++ b/pygithub3/services/users/emails.py
@@ -8,7 +8,6 @@ class Emails(Service):
""" Consume `Emails API <http://developer.github.com/v3/users/emails/>`_
.. warning::
-
You must be authenticated for all requests
"""
@@ -26,7 +25,6 @@ class Emails(Service):
:param list emails: Emails to add
.. note::
-
It rejects non-valid emails
::
diff --git a/pygithub3/services/users/followers.py b/pygithub3/services/users/followers.py
index d6969e2..5a8176d 100644
--- a/pygithub3/services/users/followers.py
+++ b/pygithub3/services/users/followers.py
@@ -19,7 +19,6 @@ class Followers(Service):
authenticated user's followers
.. warning::
-
If you aren't authenticated and call without user, it returns 403
::
@@ -40,7 +39,6 @@ class Followers(Service):
authenticated user's followings
.. warning::
-
If you aren't authenticated and call without user, it returns 403
::
@@ -65,7 +63,6 @@ class Followers(Service):
:param str user: Username
.. warning::
-
You must be authenticated
"""
request = self.make_request('users.followers.follow', user=user)
@@ -77,7 +74,6 @@ class Followers(Service):
:param str user: Username
.. warning::
-
You must be authenticated
"""
request = self.make_request('users.followers.unfollow', user=user)
diff --git a/pygithub3/services/users/keys.py b/pygithub3/services/users/keys.py
index 996233c..2884881 100644
--- a/pygithub3/services/users/keys.py
+++ b/pygithub3/services/users/keys.py
@@ -8,7 +8,6 @@ class Keys(Service):
""" Consume `Keys API <http://developer.github.com/v3/users/keys/>`_
.. warning::
-
You must be authenticated for all requests
"""