aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2012-02-12 17:53:07 +0100
committerDavid Medina <davidmedina9@gmail.com>2012-02-12 18:37:02 +0100
commit3371f0aabc61dfc8549f0752ccc83aef06df61e8 (patch)
tree1fa6291a13ca8f3acdf2eed459be2ea08b7602d0 /pygithub3
parentSupport to map `self` in resources. (diff)
downloadpython-github3-3371f0aabc61dfc8549f0752ccc83aef06df61e8.tar.xz
python-github3-3371f0aabc61dfc8549f0752ccc83aef06df61e8.zip
Repos service initialized
+service.repos.repo
Diffstat (limited to '')
-rw-r--r--pygithub3/github.py6
-rw-r--r--pygithub3/requests/repos/__init__.py4
-rw-r--r--pygithub3/requests/repos/repo.py86
-rw-r--r--pygithub3/resources/orgs.py14
-rw-r--r--pygithub3/resources/repos.py48
-rw-r--r--pygithub3/services/repos.py72
-rw-r--r--pygithub3/tests/services/test_repos.py140
7 files changed, 370 insertions, 0 deletions
diff --git a/pygithub3/github.py b/pygithub3/github.py
index 9d9ca98..4941ffd 100644
--- a/pygithub3/github.py
+++ b/pygithub3/github.py
@@ -2,6 +2,7 @@
# -*- encoding: utf-8 -*-
from pygithub3.services.users import User
+from pygithub3.services.repos import Repo
class Github(object):
@@ -9,7 +10,12 @@ class Github(object):
def __init__(self, **config):
self._users = User(**config)
+ self._repos = Repo(**config)
@property
def users(self):
return self._users
+
+ @property
+ def repos(self):
+ return self._repos
diff --git a/pygithub3/requests/repos/__init__.py b/pygithub3/requests/repos/__init__.py
new file mode 100644
index 0000000..bb86dac
--- /dev/null
+++ b/pygithub3/requests/repos/__init__.py
@@ -0,0 +1,4 @@
+# -*- encoding: utf-8 -*-
+
+from pygithub3.requests import Request, ValidationError
+from repo import *
diff --git a/pygithub3/requests/repos/repo.py b/pygithub3/requests/repos/repo.py
new file mode 100644
index 0000000..45375a9
--- /dev/null
+++ b/pygithub3/requests/repos/repo.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request
+from pygithub3.resources.repos import Repo, Team, Tag, Branch
+from pygithub3.resources.users import User
+
+__all__ = ('List', 'List_by_org', 'Create', 'Get', 'Update',
+ 'List_contributors', 'List_languages', 'List_teams', 'List_tags',
+ 'List_branches')
+
+
+class List(Request):
+
+ uri = 'users/{user}/repos'
+ resource = Repo
+
+ def clean_uri(self):
+ if not self.user:
+ return 'user/repos'
+
+
+class List_by_org(Request):
+
+ uri = 'orgs/{org}/repos'
+ resource = Repo
+
+
+class Create(Request):
+
+ uri = 'orgs/{org}/repos'
+ resource = Repo
+ body_schema = {
+ 'schema': ('name', 'description', 'homepage', 'private', 'has_issues',
+ 'has_wiki', 'has_downloads', 'team_id'),
+ 'required': ('name', )
+ }
+
+ def clean_uri(self):
+ if not self.org:
+ return 'user/repos'
+
+
+class Get(Request):
+
+ uri = 'repos/{user}/{repo}'
+ resource = Repo
+
+
+class Update(Request):
+
+ uri = 'repos/{user}/{repo}'
+ resource = Repo
+ body_schema = {
+ 'schema': ('name', 'description', 'homepage', 'private', 'has_issues',
+ 'has_wiki', 'has_downloads', 'team_id'),
+ 'required': ('name', )
+ }
+
+
+class List_contributors(Request):
+
+ uri = 'repos/{user}/{repo}/contributors'
+ resource = User
+
+
+class List_languages(Request):
+
+ uri = 'repos/{user}/{repo}/languages'
+
+
+class List_teams(Request):
+
+ uri = 'repos/{user}/{repo}/teams'
+ resource = Team
+
+
+class List_tags(Request):
+
+ uri = 'repos/{user}/{repo}/tags'
+ resource = Tag
+
+class List_branches(Request):
+
+ uri = 'repos/{user}/{repo}/branches'
+ resource = Branch
diff --git a/pygithub3/resources/orgs.py b/pygithub3/resources/orgs.py
new file mode 100644
index 0000000..3996172
--- /dev/null
+++ b/pygithub3/resources/orgs.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from .base import Resource
+
+__all__ = ('Org', )
+
+
+class Org(Resource):
+
+ _dates = ('created_at', )
+
+ def __str__(self):
+ return '<Org (%s)>' % getattr(self, 'name', '')
diff --git a/pygithub3/resources/repos.py b/pygithub3/resources/repos.py
new file mode 100644
index 0000000..609ede4
--- /dev/null
+++ b/pygithub3/resources/repos.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from .base import Resource
+from .users import User
+from .orgs import Org
+
+__all__ = ('Repo', )
+
+
+class Repo(Resource):
+
+ _dates = ('created_at', 'pushed_at')
+ _maps = {'owner': User, 'organization': Org, 'parent': 'self',
+ 'source': 'self'}
+
+ def __str__(self):
+ return '<Repo (%s)>' % getattr(self, 'name', '')
+
+
+class Team(Resource):
+
+ def __str__(self):
+ return '<Team (%s)>' % getattr(self, 'name', '')
+
+
+class Commit(Resource):
+
+ def __str__(self):
+ return '<Commit (%s:%s)>' % (
+ getattr(self, 'sha', ''),
+ getattr(self, 'message', ''))
+
+
+class Tag(Resource):
+
+ _maps = {'commit': Commit}
+
+ def __str__(self):
+ return '<Tag (%s)>' % getattr(self, 'name', '')
+
+
+class Branch(Resource):
+
+ _maps = {'commit': Commit}
+
+ def __str__(self):
+ return '<Branch (%s)>' % getattr(self, 'name', '')
diff --git a/pygithub3/services/repos.py b/pygithub3/services/repos.py
new file mode 100644
index 0000000..9b061d4
--- /dev/null
+++ b/pygithub3/services/repos.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from .base import Base
+
+
+class Repo(Base):
+
+ def __init__(self, **config):
+ super(Repo, self).__init__(**config)
+
+ def list(self, user=None, type='all'):
+ request = self.make_request('repos.list',
+ user=user or self.get_user())
+ return self._get_result(request, type=type)
+
+ def list_by_org(self, org, type='all'):
+ request = self.make_request('repos.list_by_org', org=org)
+ return self._get_result(request, type=type)
+
+ def create(self, data, in_org=None):
+ request = self.make_request('repos.create', org=in_org, body=data)
+ return self._post(request)
+
+ def get(self, user=None, repo=None):
+ request = self.make_request('repos.get',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get(request)
+
+ def update(self, data, user=None, repo=None):
+ request = self.make_request('repos.update',
+ body=data,
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._patch(request)
+
+ def __list_contributors(self, user=None, repo=None, **kwargs):
+ request = self.make_request('repos.list_contributors',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get_result(request, **kwargs)
+
+ def list_contributors(self, user=None, repo=None):
+ return self.__list_contributors(user, repo)
+
+ def list_contributors_with_anonymous(self, user=None, repo=None):
+ return self.__list_contributors(user, repo, anom=True)
+
+ def list_languages(self, user=None, repo=None):
+ request = self.make_request('repos.list_languages',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get(request)
+
+ def list_teams(self, user=None, repo=None):
+ request = self.make_request('repos.list_teams',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get_result(request)
+
+ def list_tags(self, user=None, repo=None):
+ request = self.make_request('repos.list_tags',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get_result(request)
+
+ def list_branches(self, user=None, repo=None):
+ request = self.make_request('repos.list_branches',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get_result(request)
diff --git a/pygithub3/tests/services/test_repos.py b/pygithub3/tests/services/test_repos.py
new file mode 100644
index 0000000..af7c0b0
--- /dev/null
+++ b/pygithub3/tests/services/test_repos.py
@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from unittest import TestCase
+
+import requests
+from mock import patch, Mock
+
+from pygithub3.services.repos import Repo
+from pygithub3.resources.base import json
+from pygithub3.tests.utils.base import mock_response, mock_response_result
+from pygithub3.tests.utils.services import _, mock_json
+
+json.dumps = Mock(side_effect=mock_json)
+json.loads = Mock(side_effect=mock_json)
+
+
+@patch.object(requests.sessions.Session, 'request')
+class TestRepoService(TestCase):
+
+ def setUp(self):
+ self.rs = Repo()
+ self.rs.set_user('octocat')
+ self.rs.set_repo('octocat_repo')
+
+ def test_LIST_without_user(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.set_user('')
+ self.rs.list().all()
+ self.assertEqual(request_method.call_args[0], ('get', _('user/repos')))
+
+ def test_LIST_with_user_in_args(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list('octoc').all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('users/octoc/repos')))
+
+ def test_LIST_with_user_in_service(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('users/octocat/repos')))
+
+ def test_LIST_filters(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list('octoc', type='public').all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('users/octoc/repos')))
+ self.assertEqual(request_method.call_args[1]['params']['type'],
+ 'public')
+
+ def test_LIST_BY_ORG(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_by_org('org_name').all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('orgs/org_name/repos')))
+
+ def test_LIST_BY_ORG_filters(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_by_org('org_name', type='public').all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('orgs/org_name/repos')))
+ self.assertEqual(request_method.call_args[1]['params']['type'],
+ 'public')
+
+ def test_CREATE(self, request_method):
+ request_method.return_value = mock_response('post')
+ self.rs.create({'name': 'test'})
+ self.assertEqual(request_method.call_args[0],
+ ('post', _('user/repos')))
+
+ def test_CREATE_in_org(self, request_method):
+ request_method.return_value = mock_response('post')
+ self.rs.create({'name': 'test'}, in_org='org_name')
+ self.assertEqual(request_method.call_args[0],
+ ('post', _('orgs/org_name/repos')))
+
+ def test_GET_with_repo_in_args(self, request_method):
+ request_method.return_value = mock_response()
+ self.rs.get(user='user', repo='repo')
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/user/repo')))
+
+ def test_GET_with_repo_in_service(self, request_method):
+ request_method.return_value = mock_response()
+ self.rs.get()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo')))
+
+ def test_UPDATE_with_repo_in_args(self, request_method):
+ request_method.return_value = mock_response('patch')
+ self.rs.update({'name': 'test'}, user='user', repo='repo')
+ self.assertEqual(request_method.call_args[0],
+ ('patch', _('repos/user/repo')))
+
+ def test_UPDATE_with_repo_in_service(self, request_method):
+ request_method.return_value = mock_response('patch')
+ self.rs.update({'name': 'test'})
+ self.assertEqual(request_method.call_args[0],
+ ('patch', _('repos/octocat/octocat_repo')))
+
+ """ From here I stop to do '*in_args' and '*filter' tests, I consider
+ that I tested it enough... """
+
+ def test_LIST_contributors(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_contributors().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo/contributors')))
+
+ def test_LIST_contributors_with_anonymous(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_contributors_with_anonymous().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo/contributors')))
+ self.assertEqual(request_method.call_args[1]['params']['anom'], True)
+
+ def test_LIST_languages(self, request_method):
+ request_method.return_value = mock_response()
+ self.rs.list_languages()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo/languages')))
+
+ def test_LIST_teams(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_teams().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo/teams')))
+
+ def test_LIST_tags(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_tags().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo/tags')))
+
+ def test_LIST_branches(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.rs.list_branches().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/octocat_repo/branches')))