From c7c03100fd0584b759bb75d461a12f5bcd5aabba Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Mon, 23 Apr 2012 17:44:10 +0200 Subject: Baseline Orgs API implementation --- pygithub3/resources/orgs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pygithub3/resources') diff --git a/pygithub3/resources/orgs.py b/pygithub3/resources/orgs.py index 3996172..be6769a 100644 --- a/pygithub3/resources/orgs.py +++ b/pygithub3/resources/orgs.py @@ -11,4 +11,4 @@ class Org(Resource): _dates = ('created_at', ) def __str__(self): - return '' % getattr(self, 'name', '') + return '' % getattr(self, 'login', '') -- cgit v1.2.3-59-g8ed1b From 0559014ee5957331d05e857c6a929279837b2e8e Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Tue, 24 Apr 2012 01:04:53 +0200 Subject: Move Team to orgs --- pygithub3/requests/repos/__init__.py | 3 ++- pygithub3/resources/orgs.py | 6 ++++++ pygithub3/resources/repos.py | 7 +------ 3 files changed, 9 insertions(+), 7 deletions(-) (limited to 'pygithub3/resources') diff --git a/pygithub3/requests/repos/__init__.py b/pygithub3/requests/repos/__init__.py index cd920fe..7bbcf3e 100644 --- a/pygithub3/requests/repos/__init__.py +++ b/pygithub3/requests/repos/__init__.py @@ -1,8 +1,9 @@ # -*- encoding: utf-8 -*- from pygithub3.requests.base import Request, ValidationError +from pygithub3.resources.orgs import Team +from pygithub3.resources.repos import Repo, Tag, Branch from pygithub3.resources.users import User -from pygithub3.resources.repos import Repo, Team, Tag, Branch class List(Request): diff --git a/pygithub3/resources/orgs.py b/pygithub3/resources/orgs.py index be6769a..a79395d 100644 --- a/pygithub3/resources/orgs.py +++ b/pygithub3/resources/orgs.py @@ -12,3 +12,9 @@ class Org(Resource): def __str__(self): return '' % getattr(self, 'login', '') + + +class Team(Resource): + + def __str__(self): + return '' % getattr(self, 'name', '') diff --git a/pygithub3/resources/repos.py b/pygithub3/resources/repos.py index c7ec5e8..f50d694 100644 --- a/pygithub3/resources/repos.py +++ b/pygithub3/resources/repos.py @@ -18,12 +18,6 @@ class Repo(Resource): return '' % getattr(self, 'name', '') -class Team(Resource): - - def __str__(self): - return '' % getattr(self, 'name', '') - - class Author(Resource): _dates = ('date') @@ -115,6 +109,7 @@ class Download(Resource): 'Policy': self.policy, 'Signature': self.signature, 'Content-Type': self.mime_type}) + class Hook(Resource): _dates = ('created_at', 'pushed_at') -- cgit v1.2.3-59-g8ed1b From 5fa7037bf460d2936c935f19968239d694378f51 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Tue, 24 Apr 2012 08:44:11 +0200 Subject: Add Orgs Members API --- pygithub3/requests/orgs/members.py | 34 +++++++++++++ pygithub3/resources/orgs.py | 6 +++ pygithub3/services/orgs/__init__.py | 5 ++ pygithub3/services/orgs/members.py | 91 +++++++++++++++++++++++++++++++++++ pygithub3/tests/services/test_orgs.py | 55 +++++++++++++++++++-- 5 files changed, 187 insertions(+), 4 deletions(-) create mode 100644 pygithub3/requests/orgs/members.py create mode 100644 pygithub3/services/orgs/members.py (limited to 'pygithub3/resources') diff --git a/pygithub3/requests/orgs/members.py b/pygithub3/requests/orgs/members.py new file mode 100644 index 0000000..4596eb3 --- /dev/null +++ b/pygithub3/requests/orgs/members.py @@ -0,0 +1,34 @@ +# -*- encoding: utf-8 -*- + +from pygithub3.resources.orgs import Member +from . import Request + + +class List(Request): + uri = 'orgs/{org}/members' + resource = Member + + +class Get(Request): + uri = 'orgs/{org}/members/{user}' + + +class Delete(Request): + uri = 'orgs/{org}/members/{user}' + + +class Listpublic(Request): + uri = 'orgs/{org}/public_members' + resource = Member + + +class Getpublic(Request): + uri = 'orgs/{org}/public_members/{user}' + + +class Publicize(Request): + uri = 'orgs/{org}/public_members/{user}' + + +class Conceal(Request): + uri = 'orgs/{org}/public_members/{user}' diff --git a/pygithub3/resources/orgs.py b/pygithub3/resources/orgs.py index a79395d..6e2d39b 100644 --- a/pygithub3/resources/orgs.py +++ b/pygithub3/resources/orgs.py @@ -18,3 +18,9 @@ class Team(Resource): def __str__(self): return '' % getattr(self, 'name', '') + + +class Member(Resource): + + def __str__(self): + return '' % getattr(self, 'login', '') diff --git a/pygithub3/services/orgs/__init__.py b/pygithub3/services/orgs/__init__.py index c222956..6a75081 100644 --- a/pygithub3/services/orgs/__init__.py +++ b/pygithub3/services/orgs/__init__.py @@ -1,11 +1,16 @@ # -*- encoding: utf-8 -*- from pygithub3.services.base import Service +from .members import Members class Org(Service): """ Consume `Orgs API `_ """ + def __init__(self, **config): + self.members = Members(**config) + super(Org, self).__init__(**config) + def list(self, user=None): """ Get user's orgs diff --git a/pygithub3/services/orgs/members.py b/pygithub3/services/orgs/members.py new file mode 100644 index 0000000..3df4dab --- /dev/null +++ b/pygithub3/services/orgs/members.py @@ -0,0 +1,91 @@ +# -*- encoding: utf-8 -*- + +from . import Service + + +class Members(Service): + """ Consume `Members API `_ + """ + + def list(self, org): + """ Get org's members + + :param str org: Organisation name + :returns: A :doc:`result` + + If you call it authenticated, and are a member of the org, public and + private members will be visible. + + If not, only public members will be visible. + """ + request = self.request_builder('orgs.members.list', org=org) + return self._get_result(request) + + def is_member(self, org, user): + """ Determine if user is a member of org + + :param str org: Organisation name + :param str user: User name + """ + request = self.request_builder('orgs.members.get', org=org, user=user) + return self._bool(request) + + def remove_member(self, org, user): + """ Remove user from all teams in org + + :param str org: Organisation name + :param str user: User name + + .. warning :: + You must be authenticated and an owner of org + + """ + request = self.request_builder('orgs.members.get', org=org, user=user) + return self._delete(request) + + def list_public(self, org): + """ Get org's public members + + :param str org: Organisation name + :returns: A :doc:`result` + """ + request = self.request_builder('orgs.members.listpublic', org=org) + return self._get_result(request) + + def is_public_member(self, org, user): + """ Determine if user is a public member of org + + :param str org: Organisation name + :param str user: User name + """ + request = self.request_builder('orgs.members.getpublic', + org=org, user=user) + return self._bool(request) + + def publicize_membership(self, org, user): + """ Publicize user's membership in org + + :param str org: Organisation name + :param str user: User name + + .. warning :: + You must be authenticated and the user, or an owner of the org + + """ + request = self.request_builder('orgs.members.publicize', + org=org, user=user) + return self._put(request) + + def conceal_membership(self, org, user): + """ Conceal user's membership in org + + :param str org: Organisation name + :param str user: User name + + .. warning :: + You must be authenticated and the user, or an owner of the org + + """ + request = self.request_builder('orgs.members.conceal', + org=org, user=user) + return self._delete(request) diff --git a/pygithub3/tests/services/test_orgs.py b/pygithub3/tests/services/test_orgs.py index a6416ff..e741666 100644 --- a/pygithub3/tests/services/test_orgs.py +++ b/pygithub3/tests/services/test_orgs.py @@ -6,7 +6,7 @@ from mock import patch, Mock from pygithub3.tests.utils.core import TestCase from pygithub3.resources.base import json -from pygithub3.services.orgs import Org +from pygithub3.services.orgs import Org, Members from pygithub3.tests.utils.base import (mock_response, mock_response_result, mock_json) from pygithub3.tests.utils.services import _ @@ -17,7 +17,6 @@ json.loads = Mock(side_effect=mock_json) @patch.object(requests.sessions.Session, 'request') class TestOrgService(TestCase): - def setUp(self): self.org = Org() @@ -30,7 +29,7 @@ class TestOrgService(TestCase): request_method.return_value = mock_response_result() self.org.list('octocat').all() self.assertEqual(request_method.call_args[0], - ('get', _('users/octocat/orgs'))) + ('get', _('users/octocat/orgs'))) def test_GET(self, request_method): request_method.return_value = mock_response() @@ -41,4 +40,52 @@ class TestOrgService(TestCase): request_method.return_value = mock_response('patch') self.org.update('acme', {'company': 'ACME Widgets'}) self.assertEqual(request_method.call_args[0], - ('patch', _('orgs/acme'))) + ('patch', _('orgs/acme'))) + + +@patch.object(requests.sessions.Session, 'request') +class TestOrgMemberService(TestCase): + def setUp(self): + self.ms = Members() + + def test_LIST(self, request_method): + request_method.return_value = mock_response_result() + self.ms.list('acme').all() + self.assertEqual(request_method.call_args[0], + ('get', _('orgs/acme/members'))) + + def test_IS_MEMBER(self, request_method): + request_method.return_value = mock_response() + self.ms.is_member('acme', 'octocat') + self.assertEqual(request_method.call_args[0], + ('head', _('orgs/acme/members/octocat'))) + + def test_REMOVE_MEMBER(self, request_method): + request_method.return_value = mock_response('delete') + self.ms.remove_member('acme', 'octocat') + self.assertEqual(request_method.call_args[0], + ('delete', _('orgs/acme/members/octocat'))) + + def test_LIST_PUBLIC(self, request_method): + request_method.return_value = mock_response_result() + self.ms.list_public('acme').all() + self.assertEqual(request_method.call_args[0], + ('get', _('orgs/acme/public_members'))) + + def test_IS_PUBLIC_MEMBER(self, request_method): + request_method.return_value = mock_response() + self.ms.is_public_member('acme', 'octocat') + self.assertEqual(request_method.call_args[0], + ('head', _('orgs/acme/public_members/octocat'))) + + def test_PUBLICIZE_MEMBERSHIP(self, request_method): + request_method.return_value = mock_response() + self.ms.publicize_membership('acme', 'octocat') + self.assertEqual(request_method.call_args[0], + ('put', _('orgs/acme/public_members/octocat'))) + + def test_CONCEAL_MEMBERSHIP(self, request_method): + request_method.return_value = mock_response('delete') + self.ms.conceal_membership('acme', 'octocat') + self.assertEqual(request_method.call_args[0], + ('delete', _('orgs/acme/public_members/octocat'))) -- cgit v1.2.3-59-g8ed1b From 4c63c55de6fa6e821ded49a9aa4c45007d62447c Mon Sep 17 00:00:00 2001 From: David Medina Date: Sun, 27 May 2012 21:27:14 +0200 Subject: Little fixs --- docs/orgs.rst | 46 +++++++++++++++++++++++++++++++++++ docs/services.rst | 1 + pygithub3/requests/orgs/members.py | 4 +-- pygithub3/requests/orgs/teams.py | 3 +++ pygithub3/resources/orgs.py | 2 ++ pygithub3/services/orgs/members.py | 7 +++--- pygithub3/services/orgs/teams.py | 19 +++------------ pygithub3/tests/services/test_orgs.py | 8 +++--- 8 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 docs/orgs.rst (limited to 'pygithub3/resources') diff --git a/docs/orgs.rst b/docs/orgs.rst new file mode 100644 index 0000000..96e7a73 --- /dev/null +++ b/docs/orgs.rst @@ -0,0 +1,46 @@ +.. _Orgs service: + +Orgs services +============== + +**Fast sample**:: + + from pygithub3 import Github + + gh = Github(token='abc123') + + auth_orgs = gh.orgs.list().all() + members = gh.orgs.members.list('github') + +Org +------ + +.. autoclass:: pygithub3.services.orgs.Org + :members: + + .. attribute:: members + + :ref:`Members service` + + .. attribute:: teams + + :ref:`Teams service` + +.. _Members service: + +Members +--------- + +.. autoclass:: pygithub3.services.orgs.members.Members + :members: + +.. _Teams service: + +Teams +------- + +.. autoclass:: pygithub3.services.orgs.teams.Teams + :members: + +.. _github orgs doc: http://developer.github.com/v3/orgs +.. _github orgs teams doc: http://developer.github.com/v3/orgs/teams diff --git a/docs/services.rst b/docs/services.rst index 71fa690..6e1abca 100644 --- a/docs/services.rst +++ b/docs/services.rst @@ -72,5 +72,6 @@ List of services users repos gists + orgs .. _mimetypes: http://developer.github.com/v3/mime diff --git a/pygithub3/requests/orgs/members.py b/pygithub3/requests/orgs/members.py index 4596eb3..a6b05c2 100644 --- a/pygithub3/requests/orgs/members.py +++ b/pygithub3/requests/orgs/members.py @@ -9,7 +9,7 @@ class List(Request): resource = Member -class Get(Request): +class Is_member(Request): uri = 'orgs/{org}/members/{user}' @@ -22,7 +22,7 @@ class Listpublic(Request): resource = Member -class Getpublic(Request): +class Is_public_member(Request): uri = 'orgs/{org}/public_members/{user}' diff --git a/pygithub3/requests/orgs/teams.py b/pygithub3/requests/orgs/teams.py index 4b30533..cc92f9c 100644 --- a/pygithub3/requests/orgs/teams.py +++ b/pygithub3/requests/orgs/teams.py @@ -23,6 +23,9 @@ class Create(Request): 'required': ('name',), } + # TODO: Check if this request fails with invalid permission + #def clean_body(self): + class Update(Request): uri = 'teams/{id}' diff --git a/pygithub3/resources/orgs.py b/pygithub3/resources/orgs.py index 6e2d39b..f0a9804 100644 --- a/pygithub3/resources/orgs.py +++ b/pygithub3/resources/orgs.py @@ -2,6 +2,7 @@ # -*- encoding: utf-8 -*- from .base import Resource +from .users import Plan __all__ = ('Org', ) @@ -9,6 +10,7 @@ __all__ = ('Org', ) class Org(Resource): _dates = ('created_at', ) + _maps = {'plan': Plan} def __str__(self): return '' % getattr(self, 'login', '') diff --git a/pygithub3/services/orgs/members.py b/pygithub3/services/orgs/members.py index 3df4dab..fb0da03 100644 --- a/pygithub3/services/orgs/members.py +++ b/pygithub3/services/orgs/members.py @@ -27,7 +27,8 @@ class Members(Service): :param str org: Organisation name :param str user: User name """ - request = self.request_builder('orgs.members.get', org=org, user=user) + request = self.request_builder('orgs.members.is_member', org=org, + user=user) return self._bool(request) def remove_member(self, org, user): @@ -40,7 +41,7 @@ class Members(Service): You must be authenticated and an owner of org """ - request = self.request_builder('orgs.members.get', org=org, user=user) + request = self.request_builder('orgs.members.delete', org=org, user=user) return self._delete(request) def list_public(self, org): @@ -58,7 +59,7 @@ class Members(Service): :param str org: Organisation name :param str user: User name """ - request = self.request_builder('orgs.members.getpublic', + request = self.request_builder('orgs.members.is_public_member', org=org, user=user) return self._bool(request) diff --git a/pygithub3/services/orgs/teams.py b/pygithub3/services/orgs/teams.py index 2e47803..84aa855 100644 --- a/pygithub3/services/orgs/teams.py +++ b/pygithub3/services/orgs/teams.py @@ -28,32 +28,21 @@ class Teams(Service): request = self.request_builder('orgs.teams.get', id=id) return self._get(request) - def create(self, org, name, repo_names=None, permission=None): + def create(self, org, data): """ Create a new team :param str org: Organisation name - :param str name: Team name - :param list repo_names: List of repo names to belong to the team - :param str permission: Permissions to be granted to members + :param dict data: Input. See `github orgs teams doc`_ """ - data = {'name': name} - if repo_names: - data['repo_names'] = repo_names - if permission: - data['permission'] = permission request = self.request_builder('orgs.teams.create', org=org, body=data) return self._post(request) - def update(self, id, name, permission=None): + def update(self, id, data): """ Update a team :param int id: The team id - :param str name: Team name - :param str permission: Permissions to be granted to members + :param dict data: Input. See `github orgs teams doc`_ """ - data = {'name': name} - if permission: - data['permission'] = permission request = self.request_builder('orgs.teams.update', id=id, body=data) return self._patch(request) diff --git a/pygithub3/tests/services/test_orgs.py b/pygithub3/tests/services/test_orgs.py index 4d4c1c9..7f5f7af 100644 --- a/pygithub3/tests/services/test_orgs.py +++ b/pygithub3/tests/services/test_orgs.py @@ -44,7 +44,7 @@ class TestOrgService(TestCase): @patch.object(requests.sessions.Session, 'request') -class TestOrgMemberService(TestCase): +class TestMemberService(TestCase): def setUp(self): self.ms = Members() @@ -92,7 +92,7 @@ class TestOrgMemberService(TestCase): @patch.object(requests.sessions.Session, 'request') -class TestOrgMemberService(TestCase): +class TestTeamsService(TestCase): def setUp(self): self.ts = Teams() @@ -109,13 +109,13 @@ class TestOrgMemberService(TestCase): def test_CREATE(self, request_method): request_method.return_value = mock_response_result('post') - self.ts.create('acme', 'committers') + self.ts.create('acme', dict(name='new')) self.assertEqual(request_method.call_args[0], ('post', _('orgs/acme/teams'))) def test_UPDATE(self, request_method): request_method.return_value = mock_response_result() - self.ts.update(1, 'committers', 'push') + self.ts.update(1, dict(name='edited')) self.assertEqual(request_method.call_args[0], ('patch', _('teams/1'))) def test_DELETE(self, request_method): -- cgit v1.2.3-59-g8ed1b