diff options
author | 2012-04-28 23:47:25 +0200 | |
---|---|---|
committer | 2012-04-28 23:47:25 +0200 | |
commit | 5178849299bf8d0a903811c3b7561e8bc3bb6c14 (patch) | |
tree | 2f914320c4f3813ec8a0058abb189fae822bb4ed /pygithub3/services | |
parent | :sparkles: Release 0.3 :sparkles: (diff) | |
parent | Add Teams Service (diff) | |
download | python-github3-5178849299bf8d0a903811c3b7561e8bc3bb6c14.tar.xz python-github3-5178849299bf8d0a903811c3b7561e8bc3bb6c14.zip |
Merged pull request #5 from stefanor:services/orgs
Diffstat (limited to 'pygithub3/services')
-rw-r--r-- | pygithub3/services/base.py | 10 | ||||
-rw-r--r-- | pygithub3/services/orgs/__init__.py | 58 | ||||
-rw-r--r-- | pygithub3/services/orgs/members.py | 91 | ||||
-rw-r--r-- | pygithub3/services/orgs/teams.py | 147 |
4 files changed, 301 insertions, 5 deletions
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/services/orgs/__init__.py b/pygithub3/services/orgs/__init__.py new file mode 100644 index 0000000..8499719 --- /dev/null +++ b/pygithub3/services/orgs/__init__.py @@ -0,0 +1,58 @@ +# -*- encoding: utf-8 -*- + +from pygithub3.services.base import Service +from .members import Members +from .teams import Teams + + +class Org(Service): + """ Consume `Orgs API <http://developer.github.com/v3/orgs>`_ """ + + def __init__(self, **config): + self.members = Members(**config) + self.teams = Teams(**config) + super(Org, self).__init__(**config) + + def list(self, user=None): + """ Get user's orgs + + :param str user: Username + :returns: A :doc:`result` + + If you call it without user and you are authenticated, get the + authenticated user's orgs, public and private. + + If you call it with a user, get the user's public orgs. + + :: + + org_service.list('copitux') + org_service.list() + """ + request = self.request_builder('orgs.list', user=user) + return self._get_result(request) + + def get(self, org): + """ Get a single org + + :param str org: Org name + """ + request = self.request_builder('orgs.get', org=org) + return self._get(request) + + def update(self, org, data): + """ Update a single org + + :param str org: Org name + :param dict data: Input. See `github orgs doc`_ + + .. warning :: + You must be authenticated + + :: + + org_service.update(dict(company='ACME Development', + location='Timbuctoo')) + """ + request = self.request_builder('orgs.update', org=org, body=data) + return self._patch(request) 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 <http://developer.github.com/v3/orgs/members/>`_ + """ + + 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/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 <http://developer.github.com/v3/orgs/teams/>`_ + + .. 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) |