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/tests/services/test_orgs.py | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pygithub3/tests/services/test_orgs.py (limited to 'pygithub3/tests') diff --git a/pygithub3/tests/services/test_orgs.py b/pygithub3/tests/services/test_orgs.py new file mode 100644 index 0000000..a6416ff --- /dev/null +++ b/pygithub3/tests/services/test_orgs.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +import requests +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.tests.utils.base import (mock_response, mock_response_result, + mock_json) +from pygithub3.tests.utils.services import _ + +json.dumps = Mock(side_effect=mock_json) +json.loads = Mock(side_effect=mock_json) + + +@patch.object(requests.sessions.Session, 'request') +class TestOrgService(TestCase): + + def setUp(self): + self.org = Org() + + def test_LIST_without_user(self, request_method): + request_method.return_value = mock_response_result() + self.org.list().all() + self.assertEqual(request_method.call_args[0], ('get', _('user/orgs'))) + + def test_LIST_with_user(self, request_method): + request_method.return_value = mock_response_result() + self.org.list('octocat').all() + self.assertEqual(request_method.call_args[0], + ('get', _('users/octocat/orgs'))) + + def test_GET(self, request_method): + request_method.return_value = mock_response() + self.org.get('acme') + self.assertEqual(request_method.call_args[0], ('get', _('orgs/acme'))) + + def test_UPDATE(self, request_method): + request_method.return_value = mock_response('patch') + self.org.update('acme', {'company': 'ACME Widgets'}) + self.assertEqual(request_method.call_args[0], + ('patch', _('orgs/acme'))) -- 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/tests') 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 b488b8447fc943d920cd72b60c6647e5840ff800 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Tue, 24 Apr 2012 09:10:06 +0200 Subject: An empty string doesn't work around the 411 issue on PUTs. Use 'PLACEHOLDER' --- pygithub3/services/base.py | 10 +++++----- pygithub3/tests/services/test_core.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'pygithub3/tests') diff --git a/pygithub3/services/base.py b/pygithub3/services/base.py index 886a666..c91bc72 100644 --- a/pygithub3/services/base.py +++ b/pygithub3/services/base.py @@ -105,10 +105,10 @@ class Service(object): def _put(self, request, **kwargs): """ Bug in Github API? requests library? - I must send data as empty string when the specifications' of some PUT - request are 'Not send input data'. If I don't do that and send data as - None, the requests library doesn't send 'Content-length' header and the - server returns 411 - Required Content length (at least 0) + I must send data when the specifications' of some PUT request are 'Not + send input data'. If I don't do that and send data as None, the + requests library doesn't send 'Content-length' header and the server + returns 411 - Required Content length (at least 0) For instance: - follow-user request doesn't send input data @@ -119,7 +119,7 @@ class Service(object): Related: https://github.com/github/developer.github.com/pull/52 """ - input_data = request.get_body() or '' + input_data = request.get_body() or 'PLACEHOLDER' response = self._client.put(request, data=input_data, **kwargs) if response.status_code != 204: # != NO_CONTENT return request.resource.loads(response.content) diff --git a/pygithub3/tests/services/test_core.py b/pygithub3/tests/services/test_core.py index bd95b34..8a2bbbe 100644 --- a/pygithub3/tests/services/test_core.py +++ b/pygithub3/tests/services/test_core.py @@ -27,7 +27,7 @@ class TestServiceCalls(TestCase): def test_PUT(self, request_method): self.s._put(self.r, **self.args) - data = '' # See _put + data = 'PLACEHOLDER' # See _put request_method.assert_called_with('put', _('dummyrequest'), data=data, params=self.args) -- cgit v1.2.3-59-g8ed1b From 52b4a5db0be700fe6b48bfe1e0bda2bd86294db7 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Tue, 24 Apr 2012 10:42:25 +0200 Subject: Add Teams Service --- pygithub3/requests/orgs/teams.py | 71 ++++++++++++++++ pygithub3/services/orgs/__init__.py | 2 + pygithub3/services/orgs/teams.py | 147 ++++++++++++++++++++++++++++++++++ pygithub3/tests/services/test_orgs.py | 83 ++++++++++++++++++- 4 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 pygithub3/requests/orgs/teams.py create mode 100644 pygithub3/services/orgs/teams.py (limited to 'pygithub3/tests') diff --git a/pygithub3/requests/orgs/teams.py b/pygithub3/requests/orgs/teams.py new file mode 100644 index 0000000..4b30533 --- /dev/null +++ b/pygithub3/requests/orgs/teams.py @@ -0,0 +1,71 @@ +# -*- encoding: utf-8 -*- + +from pygithub3.resources.orgs import Member, Team +from pygithub3.resources.repos import Repo +from . import Request + + +class List(Request): + uri = 'orgs/{org}/teams' + resource = Team + + +class Get(Request): + uri = 'teams/{id}' + resource = Team + + +class Create(Request): + uri = 'orgs/{org}/teams' + resource = Team + body_schema = { + 'schema': ('name', 'repo_names', 'permission',), + 'required': ('name',), + } + + +class Update(Request): + uri = 'teams/{id}' + resource = Team + body_schema = { + 'schema': ('name', 'permission',), + 'required': ('name',), + } + + +class Delete(Request): + uri = 'teams/{id}' + + +class List_members(Request): + uri = 'teams/{id}/members' + resource = Member + + +class Is_member(Request): + uri = 'teams/{id}/members/{user}' + + +class Add_member(Request): + uri = 'teams/{id}/members/{user}' + + +class Remove_member(Request): + uri = 'teams/{id}/members/{user}' + + +class List_repos(Request): + uri = 'teams/{id}/repos' + resource = Repo + + +class Contains_repo(Request): + uri = 'teams/{id}/repos/{user}/{repo}' + + +class Add_repo(Request): + uri = 'teams/{id}/repos/{user}/{repo}' + + +class Remove_repo(Request): + uri = 'teams/{id}/repos/{user}/{repo}' diff --git a/pygithub3/services/orgs/__init__.py b/pygithub3/services/orgs/__init__.py index 6a75081..8499719 100644 --- a/pygithub3/services/orgs/__init__.py +++ b/pygithub3/services/orgs/__init__.py @@ -2,6 +2,7 @@ from pygithub3.services.base import Service from .members import Members +from .teams import Teams class Org(Service): @@ -9,6 +10,7 @@ class Org(Service): def __init__(self, **config): self.members = Members(**config) + self.teams = Teams(**config) super(Org, self).__init__(**config) def list(self, user=None): diff --git a/pygithub3/services/orgs/teams.py b/pygithub3/services/orgs/teams.py new file mode 100644 index 0000000..2e47803 --- /dev/null +++ b/pygithub3/services/orgs/teams.py @@ -0,0 +1,147 @@ +# -*- encoding: utf-8 -*- + +from . import Service + + +class Teams(Service): + """ Consume `Teams API `_ + + .. warning :: + You must be authenticated as an owner of the org + """ + + def list(self, org): + """ Get org's teams + + :param str org: Organisation name + :returns: A :doc:`result` + """ + request = self.request_builder('orgs.teams.list', org=org) + return self._get_result(request) + + def get(self, id): + """ Get a team + + :param int id: The team id + :returns: A :doc:`result` + """ + request = self.request_builder('orgs.teams.get', id=id) + return self._get(request) + + def create(self, org, name, repo_names=None, permission=None): + """ 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 + """ + 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): + """ Update a team + + :param int id: The team id + :param str name: Team name + :param str permission: Permissions to be granted to members + """ + data = {'name': name} + if permission: + data['permission'] = permission + request = self.request_builder('orgs.teams.update', id=id, body=data) + return self._patch(request) + + def delete(self, id): + """ Delete a team + + :param int id: The team id + """ + request = self.request_builder('orgs.teams.delete', id=id) + return self._delete(request) + + def list_members(self, id): + """ List the members of a team + + :param int id: The team id + :returns: A :doc:`result` + """ + request = self.request_builder('orgs.teams.list_members', id=id) + return self._get_result(request) + + def is_member(self, id, user): + """ Determine if user is a member of a team + + :param int id: The team id + :param str user: User name + """ + request = self.request_builder('orgs.teams.is_member', + id=id, user=user) + return self._bool(request) + + def add_member(self, id, user): + """ Add a user to a team + + :param int id: The team id + :param str user: User name + """ + request = self.request_builder('orgs.teams.add_member', + id=id, user=user) + return self._put(request) + + def remove_member(self, id, user): + """ Remove a member from a team + + :param int id: The team id + :param str user: User name + """ + request = self.request_builder('orgs.teams.remove_member', + id=id, user=user) + return self._delete(request) + + def list_repos(self, id): + """ List the repos that a team's members get access to + + :param int id: The team id + :returns: A :doc:`result` + """ + request = self.request_builder('orgs.teams.list_repos', id=id) + return self._get_result(request) + + def contains_repo(self, id, user, repo): + """ Determine if user is a member of a team + + :param int id: The team id + :param str user: User name + :param str repo: Repo name + """ + request = self.request_builder('orgs.teams.contains_repo', + id=id, user=user, repo=repo) + return self._bool(request) + + def add_repo(self, id, user, repo): + """ Give team members access to a repo + + :param int id: The team id + :param str user: User name + :param str repo: Repo name + """ + request = self.request_builder('orgs.teams.add_repo', + id=id, user=user, repo=repo) + return self._put(request) + + def remove_repo(self, id, user, repo): + """ Remove a repo from the a team + + :param int id: The team id + :param str user: User name + :param str repo: Repo name + """ + request = self.request_builder('orgs.teams.remove_repo', + id=id, user=user, repo=repo) + return self._delete(request) diff --git a/pygithub3/tests/services/test_orgs.py b/pygithub3/tests/services/test_orgs.py index e741666..4d4c1c9 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, Members +from pygithub3.services.orgs import Org, Members, Teams from pygithub3.tests.utils.base import (mock_response, mock_response_result, mock_json) from pygithub3.tests.utils.services import _ @@ -89,3 +89,84 @@ class TestOrgMemberService(TestCase): self.ms.conceal_membership('acme', 'octocat') self.assertEqual(request_method.call_args[0], ('delete', _('orgs/acme/public_members/octocat'))) + + +@patch.object(requests.sessions.Session, 'request') +class TestOrgMemberService(TestCase): + def setUp(self): + self.ts = Teams() + + def test_LIST(self, request_method): + request_method.return_value = mock_response_result() + self.ts.list('acme').all() + self.assertEqual(request_method.call_args[0], + ('get', _('orgs/acme/teams'))) + + def test_GET(self, request_method): + request_method.return_value = mock_response_result() + self.ts.get(1) + self.assertEqual(request_method.call_args[0], ('get', _('teams/1'))) + + def test_CREATE(self, request_method): + request_method.return_value = mock_response_result('post') + self.ts.create('acme', 'committers') + 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.assertEqual(request_method.call_args[0], ('patch', _('teams/1'))) + + def test_DELETE(self, request_method): + request_method.return_value = mock_response_result('delete') + self.ts.delete(1) + self.assertEqual(request_method.call_args[0], ('delete', _('teams/1'))) + + def test_LIST_MEMBERS(self, request_method): + request_method.return_value = mock_response_result() + self.ts.list_members(1).all() + self.assertEqual(request_method.call_args[0], + ('get', _('teams/1/members'))) + + def test_IS_MEMBER(self, request_method): + request_method.return_value = mock_response_result() + self.ts.is_member(1, 'octocat') + self.assertEqual(request_method.call_args[0], + ('head', _('teams/1/members/octocat'))) + + def test_ADD_MEMBER(self, request_method): + request_method.return_value = mock_response_result() + self.ts.add_member(1, 'octocat') + self.assertEqual(request_method.call_args[0], + ('put', _('teams/1/members/octocat'))) + + def test_REMOVE_MEMBER(self, request_method): + request_method.return_value = mock_response_result('delete') + self.ts.remove_member(1, 'octocat') + self.assertEqual(request_method.call_args[0], + ('delete', _('teams/1/members/octocat'))) + + def test_LIST_REPOS(self, request_method): + request_method.return_value = mock_response_result() + self.ts.list_repos(1).all() + self.assertEqual(request_method.call_args[0], + ('get', _('teams/1/repos'))) + + def test_CONTAINS_REPO(self, request_method): + request_method.return_value = mock_response_result() + self.ts.contains_repo(1, 'octocat', 're_oct') + self.assertEqual(request_method.call_args[0], + ('head', _('teams/1/repos/octocat/re_oct'))) + + def test_ADD_TEAM_REPO(self, request_method): + request_method.return_value = mock_response_result() + self.ts.add_repo(1, 'octocat', 're_oct') + self.assertEqual(request_method.call_args[0], + ('put', _('teams/1/repos/octocat/re_oct'))) + + def test_REMOVE_TEAM_REPO(self, request_method): + request_method.return_value = mock_response_result('delete') + self.ts.remove_repo(1, 'octocat', 're_oct') + self.assertEqual(request_method.call_args[0], + ('delete', _('teams/1/repos/octocat/re_oct'))) -- 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/tests') 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