diff options
-rw-r--r-- | pygithub3/requests/repos/keys.py | 44 | ||||
-rw-r--r-- | pygithub3/services/repos.py | 28 | ||||
-rw-r--r-- | pygithub3/tests/services/test_repos.py | 39 |
3 files changed, 110 insertions, 1 deletions
diff --git a/pygithub3/requests/repos/keys.py b/pygithub3/requests/repos/keys.py new file mode 100644 index 0000000..9a73d05 --- /dev/null +++ b/pygithub3/requests/repos/keys.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Request + +from pygithub3.resources.users import Key + + +class List(Request): + + uri = '/repos/{user}/{repo}/keys' + resource = Key + + +class Get(Request): + + uri = '/repos/{user}/{repo}/keys/{id}' + resource = Key + + +class Create(Request): + + uri = 'repos/{user}/{repo}/keys' + resource = Key + body_schema = { + 'schema': ('title', 'key'), + 'required': ('title', 'key') + } + + +class Update(Request): + + uri = 'repos/{user}/{repo}/keys/{id}' + resource = Key + body_schema = { + 'schema': ('title', 'key'), + 'required': (), + } + + +class Delete(Request): + + uri = 'repos/{user}/{repo}/keys/{id}' + resource = Key diff --git a/pygithub3/services/repos.py b/pygithub3/services/repos.py index dfb9e48..c37f21e 100644 --- a/pygithub3/services/repos.py +++ b/pygithub3/services/repos.py @@ -6,6 +6,33 @@ import requests from .base import Service, MimeTypeMixin +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'): @@ -124,6 +151,7 @@ class Repo(Service): self.commits = Commits(**config) self.downloads = Downloads(**config) self.forks = Forks(**config) + self.keys = Keys(**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 f8392b5..cc8c286 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) + Forks, Keys) from pygithub3.resources.base import json from pygithub3.tests.utils.base import (mock_response, mock_response_result, mock_json) @@ -288,3 +288,40 @@ class TestForksService(TestCase): self.fs.create() self.assertEqual(request_method.call_args[0], ('post', _('repos/oct/re_oct/forks'))) + + +@patch.object(requests.sessions.Session, 'request') +class TestKeysService(TestCase): + + def setUp(self): + self.ks = Keys(user='oct', repo='re_oct') + + def test_LIST(self, request_method): + request_method.return_value = mock_response_result() + self.ks.list().all() + self.assertEqual(request_method.call_args[0], + ('get', _('repos/oct/re_oct/keys'))) + + def test_GET(self, request_method): + request_method.return_value = mock_response() + self.ks.get(1) + self.assertEqual(request_method.call_args[0], + ('get', _('repos/oct/re_oct/keys/1'))) + + def test_CREATE(self, request_method): + request_method.return_value = mock_response('post') + self.ks.create({'title': 'test', 'key': 'ssh-rsa AAA'}) + self.assertEqual(request_method.call_args[0], + ('post', _('repos/oct/re_oct/keys'))) + + def test_UPDATE(self, request_method): + request_method.return_value = mock_response('patch') + self.ks.update(1, {'title': 'test', 'key': 'ssh-rsa AAA'}) + self.assertEqual(request_method.call_args[0], + ('patch', _('repos/oct/re_oct/keys/1'))) + + def test_DELETE(self, request_method): + request_method.return_value = mock_response('delete') + self.ks.delete(1) + self.assertEqual(request_method.call_args[0], + ('delete', _('repos/oct/re_oct/keys/1'))) |