aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3')
-rw-r--r--pygithub3/github.py9
-rw-r--r--pygithub3/requests/gists/__init__.py77
-rw-r--r--pygithub3/services/gists/__init__.py132
-rw-r--r--pygithub3/tests/services/test_gists.py6
4 files changed, 221 insertions, 3 deletions
diff --git a/pygithub3/github.py b/pygithub3/github.py
index 23b5b0b..1cf9b05 100644
--- a/pygithub3/github.py
+++ b/pygithub3/github.py
@@ -15,8 +15,10 @@ class Github(object):
def __init__(self, **config):
from pygithub3.services.users import User
from pygithub3.services.repos import Repos
+ from pygithub3.services.gists import Gist
self._users = User(**config)
self._repos = Repos(**config)
+ self._gists = Gist(**config)
@property
def remaining_requests(self):
@@ -37,3 +39,10 @@ class Github(object):
:ref:`Repos service <Repos service>`
"""
return self._repos
+
+ @property
+ def gists(self):
+ """
+ :ref:`Gist service <Gist service>`
+ """
+ return self._gists
diff --git a/pygithub3/requests/gists/__init__.py b/pygithub3/requests/gists/__init__.py
new file mode 100644
index 0000000..4dbc6e6
--- /dev/null
+++ b/pygithub3/requests/gists/__init__.py
@@ -0,0 +1,77 @@
+# -*- encoding: utf-8 -*-
+
+from pygithub3.requests.base import Request, ValidationError
+from pygithub3.resources.gists import Gist
+
+class List(Request):
+
+ uri = 'users/{user}/gists'
+ resource = Gist
+
+ def clean_uri(self):
+ if not self.user:
+ return 'gists'
+
+
+class Public(Request):
+
+ uri = 'gists/public'
+ resource = Gist
+
+
+class Starred(Request):
+
+ uri = 'gists/starred'
+ resource = Gist
+
+
+class Get(Request):
+
+ uri = 'gists/{id}'
+ resource = Gist
+
+
+class Create(Request):
+
+ uri = 'gists'
+ resource = Gist
+ body_schema = {
+ 'schema': ('description', 'public', 'files'),
+ 'required': ('public', 'files')
+ }
+
+
+class Update(Request):
+
+ uri = 'gists/{id}'
+ resource = Gist
+ body_schema = {
+ 'schema': ('description', 'public', 'files'),
+ 'required': (),
+ }
+
+
+class Star(Request):
+
+ uri = 'gists/{id}/star'
+
+
+class Unstar(Request):
+
+ uri = 'gists/{id}/star'
+
+
+class Is_starred(Request):
+
+ uri = 'gists/{id}/star'
+
+
+class Fork(Request):
+
+ uri = 'gists/{id}/fork'
+ resource = Gist
+
+
+class Delete(Request):
+
+ uri = 'gists/{id}'
diff --git a/pygithub3/services/gists/__init__.py b/pygithub3/services/gists/__init__.py
new file mode 100644
index 0000000..b983fea
--- /dev/null
+++ b/pygithub3/services/gists/__init__.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from pygithub3.services.base import Service
+
+
+class Gist(Service):
+ """ Consume `Gists API <http://developer.github.com/v3/gists>`_ """
+
+ def __init__(self, **config):
+ super(Gist, self).__init__(**config)
+
+ def list(self, user=None):
+ """ Get user's gists
+
+ :param str user: Username
+ :returns: A :doc:`result`
+
+ If you call it without user and you are authenticated, get the
+ authenticated user's gists. but if you aren't authenticated get the
+ public gists
+
+ ::
+
+ gist_service.list('copitux')
+ gist_service.list()
+ """
+ request = self.request_builder('gists.list', user=user)
+ return self._get_result(request)
+
+ def public(self):
+ """ Get public gists
+
+ :returns: A :doc:`result`
+
+ .. note ::
+ Be careful iterating the result
+ """
+ request = self.request_builder('gists.public')
+ return self._get_result(request)
+
+ def starred(self):
+ """ Get authenticated user's starred gists
+
+ :returns: A :doc:`result`
+
+ .. warning::
+ You must be authenticated
+ """
+ request = self.request_builder('gists.starred')
+ return self._get_result(request)
+
+ def get(self, id):
+ """ Get a single gist
+
+ :param int id: Gist id
+ """
+ request = self.request_builder('gists.get', id=id)
+ return self._get(request)
+
+ def create(self, data):
+ """ Create a gist
+
+ :param dict data: Input. See `github gists doc`_
+
+ ::
+
+ gist_service.create(dict(description='some gist', public=True,
+ files={'xample.py': {'content': 'import code'}}))
+ """
+ request = self.request_builder('gists.create', body=data)
+ return self._post(request)
+
+ def update(self, id, data):
+ """ Update a single gist
+
+ :param int id: Gist id
+ :param dict data: Input. See `github gists doc`_
+
+ .. warning ::
+ You must be authenticated
+
+ ::
+
+ gist_service.update(dict(description='edited',
+ files={'xample.py': {
+ 'filename': 'new_xample.py',
+ 'content': 'import new_code'}}))
+ """
+ request = self.request_builder('gists.update', id=id, body=data)
+ return self._patch(request)
+
+ def star(self, id):
+ """ Star a gist
+
+ :param int id: Gist id
+ """
+ request = self.request_builder('gists.star', id=id)
+ self._put(request)
+
+ def unstar(self, id):
+ """ Unstar a gist
+
+ :param int id: Gist id
+ """
+ request = self.request_builder('gists.unstar', id=id)
+ return self._delete(request)
+
+ def is_starred(self, id):
+ """ Check if a gist is starred
+
+ :param int id: Gist id
+ """
+ request = self.request_builder('gists.is_starred', id=id)
+ return self._bool(request)
+
+ def fork(self, id):
+ """ Fork a gist
+
+ :param int id: Gist id
+ """
+
+ request = self.request_builder('gists.fork', id=id)
+ return self._post(request)
+
+ def delete(self, id):
+ """ Delete a gist
+
+ :param int id: Gist id
+ """
+ request = self.request_builder('gists.delete', id=id)
+ return self._delete(request)
diff --git a/pygithub3/tests/services/test_gists.py b/pygithub3/tests/services/test_gists.py
index af88e1e..66ff537 100644
--- a/pygithub3/tests/services/test_gists.py
+++ b/pygithub3/tests/services/test_gists.py
@@ -34,13 +34,13 @@ class TestGistService(TestCase):
def test_LIST_public(self, request_method):
request_method.return_value = mock_response_result()
- self.gs.list_public().all()
+ self.gs.public().all()
self.assertEqual(request_method.call_args[0],
('get', _('gists/public')))
def test_LIST_starred(self, request_method):
request_method.return_value = mock_response_result()
- self.gs.list_starred.all()
+ self.gs.starred().all()
self.assertEqual(request_method.call_args[0],
('get', _('gists/starred')))
@@ -78,7 +78,7 @@ class TestGistService(TestCase):
request_method.return_value = mock_response()
self.gs.is_starred(1)
self.assertEqual(request_method.call_args[0],
- ('get', _('gists/1/star')))
+ ('head', _('gists/1/star')))
def test_FORK(self, request_method):
request_method.return_value = mock_response('post')