diff options
author | 2012-02-12 17:53:07 +0100 | |
---|---|---|
committer | 2012-02-12 18:37:02 +0100 | |
commit | 3371f0aabc61dfc8549f0752ccc83aef06df61e8 (patch) | |
tree | 1fa6291a13ca8f3acdf2eed459be2ea08b7602d0 /pygithub3 | |
parent | Support to map `self` in resources. (diff) | |
download | python-github3-3371f0aabc61dfc8549f0752ccc83aef06df61e8.tar.xz python-github3-3371f0aabc61dfc8549f0752ccc83aef06df61e8.zip |
Repos service initialized
+service.repos.repo
Diffstat (limited to '')
-rw-r--r-- | pygithub3/github.py | 6 | ||||
-rw-r--r-- | pygithub3/requests/repos/__init__.py | 4 | ||||
-rw-r--r-- | pygithub3/requests/repos/repo.py | 86 | ||||
-rw-r--r-- | pygithub3/resources/orgs.py | 14 | ||||
-rw-r--r-- | pygithub3/resources/repos.py | 48 | ||||
-rw-r--r-- | pygithub3/services/repos.py | 72 | ||||
-rw-r--r-- | pygithub3/tests/services/test_repos.py | 140 |
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'))) |