aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3')
-rw-r--r--pygithub3/requests/repos/keys.py44
-rw-r--r--pygithub3/services/repos.py28
-rw-r--r--pygithub3/tests/services/test_repos.py39
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')))