aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/services
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2012-04-28 23:47:25 +0200
committerDavid Medina <davidmedina9@gmail.com>2012-04-28 23:47:25 +0200
commit5178849299bf8d0a903811c3b7561e8bc3bb6c14 (patch)
tree2f914320c4f3813ec8a0058abb189fae822bb4ed /pygithub3/services
parent:sparkles: Release 0.3 :sparkles: (diff)
parentAdd Teams Service (diff)
downloadpython-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.py10
-rw-r--r--pygithub3/services/orgs/__init__.py58
-rw-r--r--pygithub3/services/orgs/members.py91
-rw-r--r--pygithub3/services/orgs/teams.py147
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)