Skip to content
Snippets Groups Projects
Commit f44694ac authored by Ian Cordasco's avatar Ian Cordasco
Browse files

Changes for breaking GitHub API changes

parent 7ed3d0ce
No related branches found
No related tags found
No related merge requests found
History/Changelog
-----------------
 
0.9.2: 2014-10-05
~~~~~~~~~~~~~~~~~
- Updates for `new team management`_ API changes
- Add ``Team#invite``, ``Team#membership_for``, and
``Team#revoke_membership``
- Deprecate ``Team#add_member``, ``Team#remove_member``, and
``Organization#add_member``.
- Update payload handler for ``TeamAddEvent``.
.. _new team management:
https://developer.github.com/changes/2014-09-23-one-more-week-before-the-add-team-member-api-breaking-change/
0.9.1: 2014-08-10
~~~~~~~~~~~~~~~~~
 
Loading
Loading
Loading
Loading
@@ -156,8 +156,8 @@ def _team(payload):
payload['team'] = Team(payload['team'], None)
if payload.get('repo'):
payload['repo'] = Repository(payload['repo'], None)
if payload.get('user'):
payload['user'] = User(payload['user'], None)
if payload.get('sender'):
payload['sender'] = User(payload['sender'], None)
return payload
 
 
Loading
Loading
Loading
Loading
@@ -10,15 +10,15 @@ from __future__ import unicode_literals
 
from .auths import Authorization
from .decorators import (requires_auth, requires_basic_auth,
requires_app_credentials)
requires_app_credentials)
from .events import Event
from .gists import Gist
from .issues import Issue, issue_params
from .models import GitHubCore
from .orgs import Organization, Team
from .orgs import Membership, Organization, Team
from .repos import Repository
from .search import (CodeSearchResult, IssueSearchResult,
RepositorySearchResult, UserSearchResult)
RepositorySearchResult, UserSearchResult)
from .structs import SearchIterator
from .users import User, Key
from .notifications import Thread
Loading
Loading
@@ -931,6 +931,14 @@ class GitHub(GitHubCore):
return req.content
return '' # (No coverage)
 
@requires_auth
def membership_in(self, organization):
"""Retrieve the user's membership in the specified organization."""
url = self._build_url('user', 'memberships', 'orgs',
str(organization))
json = self._json(self._get(url), 200)
return Membership(json, self)
def meta(self):
"""Returns a dictionary with arrays of addresses in CIDR format
specifying theaddresses that the incoming service hooks will originate
Loading
Loading
@@ -962,6 +970,22 @@ class GitHub(GitHubCore):
json = self._json(self._get(url), 200)
return Organization(json, self) if json else None
 
@requires_auth
def organization_memberships(self, state=None, number=-1, etag=None):
"""List organizations of which the user is a current or pending member.
:param str state: (option), state of the membership, i.e., active,
pending
:returns: iterator of :class:`Membership <github3.orgs.Membership>`
"""
params = None
url = self._build_url('user', 'memberships', 'orgs')
if state is not None and state.lower() in ('active', 'pending'):
params = {'state': state.lower()}
return self._iter(int(number), url, Membership,
params=params,
etag=etag)
@requires_auth
def pubsubhubbub(self, mode, topic, callback, secret=''):
"""Create/update a pubsubhubbub hook.
Loading
Loading
Loading
Loading
@@ -8,6 +8,8 @@ This module contains all of the classes related to organizations.
"""
from __future__ import unicode_literals
 
import warnings
from json import dumps
from .events import Event
from .models import BaseAccount, GitHubCore
Loading
Loading
@@ -66,6 +68,11 @@ class Team(GitHubCore):
 
:returns: bool
"""
warnings.warn(
'This is no longer supported by the GitHub API, see '
'https://developer.github.com/changes/2014-09-23-one-more-week'
'-before-the-add-team-member-api-breaking-change/',
DeprecationWarning)
url = self._build_url('members', login, base_url=self._api)
return self._boolean(self._put(url), 204, 404)
 
Loading
Loading
@@ -112,6 +119,20 @@ class Team(GitHubCore):
url = self._build_url('repos', repo, base_url=self._api)
return self._boolean(self._get(url), 204, 404)
 
@requires_auth
def invite(self, username):
"""Invite the user to join this team.
This returns a dictionary like so::
{'state': 'pending', 'url': 'https://api.github.com/teams/...'}
:param str username: (required), user to invite to join this team.
:returns: dictionary
"""
url = self._build_url('memberships', username, base_url=self._api)
return self._json(self._put(url), 200)
def is_member(self, login):
"""Check if ``login`` is a member of this team.
 
Loading
Loading
@@ -146,6 +167,17 @@ class Team(GitHubCore):
url = self._build_url('repos', base_url=self._api)
return self._iter(int(number), url, Repository, etag=etag)
 
@requires_auth
def membership_for(self, username):
"""Retrieve the membership information for the user.
:param str username: (required), name of the user
:returns: dictionary
"""
url = self._build_url('memberships', username, base_url=self._api)
json = self._json(self._get(url), 200)
return json or {}
@requires_auth
def remove_member(self, login):
"""Remove ``login`` from this team.
Loading
Loading
@@ -153,9 +185,24 @@ class Team(GitHubCore):
:param str login: (required), login of the member to remove
:returns: bool
"""
warnings.warn(
'This is no longer supported by the GitHub API, see '
'https://developer.github.com/changes/2014-09-23-one-more-week'
'-before-the-add-team-member-api-breaking-change/',
DeprecationWarning)
url = self._build_url('members', login, base_url=self._api)
return self._boolean(self._delete(url), 204, 404)
 
@requires_auth
def revoke_membership(self, username):
"""Revoke this user's team membership.
:param str username: (required), name of the team member
:returns: bool
"""
url = self._build_url('memberships', username, base_url=self._api)
return self._boolean(self._delete(url), 204, 404)
@requires_auth
def remove_repo(self, repo):
"""Remove ``repo`` from this team.
Loading
Loading
@@ -209,6 +256,11 @@ class Organization(BaseAccount):
def add_member(self, login, team):
"""Add ``login`` to ``team`` and thereby to this organization.
 
.. warning::
This method is no longer valid. To add a member to a team, you
must now retrieve the team directly, and use the ``invite``
method.
Any user that is to be added to an organization, must be added
to a team as per the GitHub api.
 
Loading
Loading
@@ -223,6 +275,11 @@ class Organization(BaseAccount):
:param str team: (required), team name
:returns: bool
"""
warnings.warn(
'This is no longer supported by the GitHub API, see '
'https://developer.github.com/changes/2014-09-23-one-more-week'
'-before-the-add-team-member-api-breaking-change/',
DeprecationWarning)
for t in self.iter_teams():
if team == t.name:
return t.add_member(login)
Loading
Loading
@@ -484,3 +541,38 @@ class Organization(BaseAccount):
url = self._build_url('teams', str(team_id))
json = self._json(self._get(url), 200)
return Team(json, self._session) if json else None
class Membership(GitHubCore):
"""The wrapper for information about Team and Organization memberships."""
def __init__(self, membership, session=None):
super(Membership, self).__init__(membership, session)
self._update_attributes(membership)
def _repr(self):
return '<Membership [{0}]>'.format(self.organization)
def _update_attributes(self, membership):
self._api = membership.get('url')
self.organization = Organization(membership.get('organization', {}),
self)
self.state = membership.get('state', '')
self.organization_url = membership.get('organization_url')
self.active = self.state.lower() == 'active'
self.pending = self.state.lower() == 'pending'
@requires_auth
def edit(self, state):
"""Edit the user's membership.
:param str state: (required), the state the membership should be in.
Only accepts ``"active"``.
:returns: itself
"""
if state and state.lower() == 'active':
data = dumps({'state': state.lower()})
json = self._json(self._patch(self._api, data=data))
self._update_attributes(json)
return self
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment