diff options
Diffstat (limited to 'pygithub3')
-rw-r--r-- | pygithub3/github.py | 9 | ||||
-rw-r--r-- | pygithub3/requests/gists/__init__.py | 77 | ||||
-rw-r--r-- | pygithub3/services/gists/__init__.py | 132 | ||||
-rw-r--r-- | pygithub3/tests/services/test_gists.py | 6 |
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') |