8
8
"""
9
9
from __future__ import unicode_literals
10
10
11
+ import warnings
12
+
11
13
from json import dumps
12
14
from .events import Event
13
15
from .models import BaseAccount , GitHubCore
@@ -66,6 +68,11 @@ def add_member(self, login):
66
68
67
69
:returns: bool
68
70
"""
71
+ warnings .warn (
72
+ 'This is no longer supported by the GitHub API, see '
73
+ 'https://developer.github.com/changes/2014-09-23-one-more-week'
74
+ '-before-the-add-team-member-api-breaking-change/' ,
75
+ DeprecationWarning )
69
76
url = self ._build_url ('members' , login , base_url = self ._api )
70
77
return self ._boolean (self ._put (url ), 204 , 404 )
71
78
@@ -112,6 +119,20 @@ def has_repo(self, repo):
112
119
url = self ._build_url ('repos' , repo , base_url = self ._api )
113
120
return self ._boolean (self ._get (url ), 204 , 404 )
114
121
122
+ @requires_auth
123
+ def invite (self , username ):
124
+ """Invite the user to join this team.
125
+
126
+ This returns a dictionary like so::
127
+
128
+ {'state': 'pending', 'url': 'https://api.github.com/teams/...'}
129
+
130
+ :param str username: (required), user to invite to join this team.
131
+ :returns: dictionary
132
+ """
133
+ url = self ._build_url ('memberships' , username , base_url = self ._api )
134
+ return self ._json (self ._put (url ), 200 )
135
+
115
136
def is_member (self , login ):
116
137
"""Check if ``login`` is a member of this team.
117
138
@@ -146,16 +167,42 @@ def iter_repos(self, number=-1, etag=None):
146
167
url = self ._build_url ('repos' , base_url = self ._api )
147
168
return self ._iter (int (number ), url , Repository , etag = etag )
148
169
170
+ @requires_auth
171
+ def membership_for (self , username ):
172
+ """Retrieve the membership information for the user.
173
+
174
+ :param str username: (required), name of the user
175
+ :returns: dictionary
176
+ """
177
+ url = self ._build_url ('memberships' , username , base_url = self ._api )
178
+ json = self ._json (self ._get (url ), 200 )
179
+ return json or {}
180
+
149
181
@requires_auth
150
182
def remove_member (self , login ):
151
183
"""Remove ``login`` from this team.
152
184
153
185
:param str login: (required), login of the member to remove
154
186
:returns: bool
155
187
"""
188
+ warnings .warn (
189
+ 'This is no longer supported by the GitHub API, see '
190
+ 'https://developer.github.com/changes/2014-09-23-one-more-week'
191
+ '-before-the-add-team-member-api-breaking-change/' ,
192
+ DeprecationWarning )
156
193
url = self ._build_url ('members' , login , base_url = self ._api )
157
194
return self ._boolean (self ._delete (url ), 204 , 404 )
158
195
196
+ @requires_auth
197
+ def revoke_membership (self , username ):
198
+ """Revoke this user's team membership.
199
+
200
+ :param str username: (required), name of the team member
201
+ :returns: bool
202
+ """
203
+ url = self ._build_url ('memberships' , username , base_url = self ._api )
204
+ return self ._boolean (self ._delete (url ), 204 , 404 )
205
+
159
206
@requires_auth
160
207
def remove_repo (self , repo ):
161
208
"""Remove ``repo`` from this team.
@@ -209,6 +256,11 @@ def __init__(self, org, session=None):
209
256
def add_member (self , login , team ):
210
257
"""Add ``login`` to ``team`` and thereby to this organization.
211
258
259
+ .. warning::
260
+ This method is no longer valid. To add a member to a team, you
261
+ must now retrieve the team directly, and use the ``invite``
262
+ method.
263
+
212
264
Any user that is to be added to an organization, must be added
213
265
to a team as per the GitHub api.
214
266
@@ -223,6 +275,11 @@ def add_member(self, login, team):
223
275
:param str team: (required), team name
224
276
:returns: bool
225
277
"""
278
+ warnings .warn (
279
+ 'This is no longer supported by the GitHub API, see '
280
+ 'https://developer.github.com/changes/2014-09-23-one-more-week'
281
+ '-before-the-add-team-member-api-breaking-change/' ,
282
+ DeprecationWarning )
226
283
for t in self .iter_teams ():
227
284
if team == t .name :
228
285
return t .add_member (
E377
login )
@@ -484,3 +541,38 @@ def team(self, team_id):
484
541
url = self ._build_url ('teams' , str (team_id ))
485
542
json = self ._json (self ._get (url ), 200 )
486
543
return Team (json , self ._session ) if json else None
544
+
545
+
546
+ class Membership (GitHubCore ):
547
+
548
+ """The wrapper for information about Team and Organization memberships."""
549
+
550
+ def __init__ (self , membership , session = None ):
551
+ super (Membership , self ).__init__ (membership , session )
552
+ self ._update_attributes (membership )
553
+
554
+ def _repr (self ):
555
+ return '<Membership [{0}]>' .format (self .organization )
556
+
557
+ def _update_attributes (self , membership ):
558
+ self ._api = membership .get ('url' )
559
+ self .organization = Organization (membership .get ('organization' , {}),
560
+ self )
561
+ self .state = membership .get ('state' , '' )
562
+ self .organization_url = membership .get ('organization_url' )
563
+ self .active = self .state .lower () == 'active'
564
+ self .pending = self .state .lower () == 'pending'
565
+
566
+ @requires_auth
567
+ def edit (self , state ):
568
+ """Edit the user's membership.
569
+
570
+ :param str state: (required), the state the membership should be in.
571
+ Only accepts ``"active"``.
572
+ :returns: itself
573
+ """
574
+ if state and state .lower () == 'active' :
575
+ data = dumps ({'state' : state .lower ()})
576
+ json = self ._json (self ._patch (self ._api , data = data ))
577
+ self ._update_attributes (json )
578
+ return self
0 commit comments