@@ -32,6 +32,8 @@ class Endpoints(object):
32
32
'batch' : '{root}/batch' ,
33
33
'buckets' : '{root}/buckets' ,
34
34
'bucket' : '{root}/buckets/{bucket}' ,
35
+ 'groups' : '{root}/buckets/{bucket}/groups' ,
36
+ 'group' : '{root}/buckets/{bucket}/groups/{group}' ,
35
37
'collections' : '{root}/buckets/{bucket}/collections' ,
36
38
'collection' : '{root}/buckets/{bucket}/collections/{collection}' ,
37
39
'records' : '{root}/buckets/{bucket}/collections/{collection}/records' , # NOQA
@@ -97,7 +99,7 @@ def batch(self, **kwargs):
97
99
batch_session .send ()
98
100
batch_session .reset ()
99
101
100
- def get_endpoint (self , name , bucket = None , collection = None , id = None ):
102
+ def get_endpoint (self , name , bucket = None , group = None , collection = None , id = None ):
101
103
"""Return the endpoint with named parameters.
102
104
103
105
Please always use the method as if it was defined like this:
@@ -112,6 +114,7 @@ def get_endpoint(self, name, bucket=None, collection=None, id=None):
112
114
kwargs = {
113
115
'bucket' : bucket or self ._bucket_name ,
114
116
'collection' : collection or self ._collection_name ,
117
+ 'group' : group ,
115
118
'id' : id
116
119
}
117
120
return self .endpoints .get (name , ** kwargs )
@@ -160,13 +163,15 @@ def _create_if_not_exists(self, resource, **kwargs):
160
163
# The exception contains the existing record in details.existing
161
164
# but it's not enough as we also need to return the permissions.
162
165
get_kwargs = {}
163
- if resource in ('bucket' , 'collection' , 'record' ):
166
+ if resource in ('bucket' , 'group' , ' collection' , 'record' ):
164
167
get_kwargs ['bucket' ] = kwargs ['bucket' ]
165
- if resource in ('collection' , 'record' ):
168
+ if resource == 'group' :
169
+ get_kwargs ['group' ] = kwargs ['group' ]
170
+ elif resource in ('collection' , 'record' ):
166
171
get_kwargs ['collection' ] = kwargs ['collection' ]
167
- if resource == 'record' :
168
- _id = kwargs .get ('id' ) or kwargs ['data' ]['id' ]
169
- get_kwargs ['id' ] = _id
172
+ if resource == 'record' :
173
+ _id = kwargs .get ('id' ) or kwargs ['data' ]['id' ]
174
+ get_kwargs ['id' ] = _id
170
175
171
176
get_method = getattr (self , 'get_%s' % resource )
172
177
return get_method (** get_kwargs )
@@ -259,6 +264,85 @@ def delete_buckets(self, safe=True, if_match=None, if_exists=False):
259
264
resp , _ = self .session .request ('delete' , endpoint , headers = headers )
260
265
return resp ['data' ]
261
266
267
+ # Groups
268
+
269
+ def get_groups (self , bucket = None ):
270
+ endpoint = self .get_endpoint ('groups' , bucket = bucket )
271
+ return self ._paginated (endpoint )
272
+
273
+ def create_group (self , group , bucket = None ,
274
+ data = None , permissions = None ,
275
+ safe = True , if_not_exists = False ):
276
+ if if_not_exists :
277
+ return self ._create_if_not_exists ('group' ,
278
+ group = group ,
279
+ bucket = bucket ,
280
+ data = data ,
281
+ permissions = permissions ,
282
+ safe = safe )
283
+ headers = DO_NOT_OVERWRITE if safe else None
284
+ endpoint = self .get_endpoint ('group' ,
285
+ bucket = bucket ,
286
+ group = group )
287
+ try :
288
+ resp , _ = self .session .request ('put' , endpoint , data = data ,
289
+ permissions = permissions ,
290
+ headers = headers )
291
+ except KintoException as e :
292
+ if e .response .status_code == 403 :
293
+ msg = ("Unauthorized. Please check that the bucket exists and "
294
+ "that you have the permission to create or write on "
295
+ "this group." )
296
+ e = KintoException (msg , e )
297
+ raise e
298
+
299
+ return resp
300
+
301
+ def update_group (self , group , data = None , bucket = None ,
302
+ permissions = None , method = 'put' ,
303
+ safe = True , if_match = None ):
304
+ endpoint = self .get_endpoint ('group' ,
305
+ bucket = bucket ,
306
+ group = group )
307
+ headers = self ._get_cache_headers (safe , data , if_match )
308
+ resp , _ = self .session .request (method , endpoint , data = data ,
309
+ permissions = permissions ,
310
+ headers = headers )
311
+ return resp
312
+
313
+ def patch_group (self , * args , ** kwargs ):
314
+ kwargs ['method' ] = 'patch'
315
+ return self .update_group (* args , ** kwargs )
316
+
317
+ def get_group (self , group , bucket = None ):
318
+ endpoint = self .get_endpoint ('group' ,
319
+ bucket = bucket ,
320
+ group = group )
321
+ resp , _ = self .session .request ('get' , endpoint )
322
+ return resp
323
+
324
+ def delete_group (self , group , bucket = None ,
325
+ safe = True , if_match = None ,
326
+ if_exists = False ):
327
+ if if_exists :
328
+ return self ._delete_if_exists ('group' ,
329
+ group = group ,
330
+ bucket = bucket ,
331
+ safe = safe ,
332
+ if_match = if_match )
333
+ endpoint = self .get_endpoint ('group' ,
334
+ bucket = bucket ,
335
+ group = group )
336
+ headers = self ._get_cache_headers (safe , if_match = if_match )
337
+ resp , _ = self .session .request ('delete' , endpoint , headers = headers )
338
+ return resp ['data' ]
339
+
340
+ def delete_groups (self , bucket = None , safe = True , if_match = None ):
341
+ endpoint = self .get_endpoint ('groups' , bucket = bucket )
342
+ headers = self ._get_cache_headers (safe , if_match = if_match )
343
+ resp , _ = self .session .request ('delete' , endpoint , headers = headers )
344
+ return resp ['data' ]
345
+
262
346
# Collections
263
347
264
348
def get_collections (self , bucket = None ):
0 commit comments