@@ -187,11 +187,12 @@ def list(self, obj_class, **kwargs):
187
187
raise GitlabListError ('Missing attribute(s): %s' %
188
188
", " .join (missing ))
189
189
190
- url = obj_class ._url % kwargs
190
+ args = _sanitize_dict (kwargs )
191
+ url = obj_class ._url % args
191
192
url = '%s%s' % (self ._url , url )
192
- if kwargs :
193
+ if args :
193
194
url += "?%s" % ("&" .join (
194
- ["%s=%s" % (k , v ) for k , v in kwargs .items ()]))
195
+ ["%s=%s" % (k , v ) for k , v in args .items ()]))
195
196
196
197
try :
197
198
r = requests .get (url , headers = self .headers , verify = self .ssl_verify )
@@ -225,7 +226,7 @@ def get(self, obj_class, id=None, **kwargs):
225
226
raise GitlabListError ('Missing attribute(s): %s' %
226
227
", " .join (missing ))
227
228
228
- url = obj_class ._url % kwargs
229
+ url = obj_class ._url % _sanitize_dict ( kwargs )
229
230
if id is not None :
230
231
url = '%s%s/%s' % (self ._url , url , str (id ))
231
232
else :
@@ -247,8 +248,9 @@ def get(self, obj_class, id=None, **kwargs):
247
248
raise GitlabGetError ('%d: %s' % (r .status_code , r .text ))
248
249
249
250
def delete (self , obj ):
250
- url = obj ._url % obj .__dict__
251
- url = '%s%s/%s' % (self ._url , url , str (obj .id ))
251
+ args = _sanitize_dict (obj .__dict__ )
252
+ url = obj ._url % args
253
+ url = '%s%s/%s' % (self ._url , url , args ['id' ])
252
254
253
255
try :
254
256
r = requests .delete (url ,
@@ -275,7 +277,8 @@ def create(self, obj):
275
277
raise GitlabCreateError ('Missing attribute(s): %s' %
276
278
", " .join (missing ))
277
279
278
- url = obj ._url % obj .__dict__
280
+ args = _sanitize_dict (obj .__dict__ )
281
+ url = obj ._url % args
279
282
url = '%s%s' % (self ._url , url )
280
283
281
284
try :
@@ -294,7 +297,8 @@ def create(self, obj):
294
297
raise GitlabCreateError ('%d: %s' % (r .status_code , r .text ))
295
298
296
299
def update (self , obj ):
297
- url = obj ._url % obj .__dict__
300
+ args = _sanitize_dict (obj .__dict__ )
301
+ url = obj ._url % args
298
302
url = '%s%s/%s' % (self ._url , url , str (obj .id ))
299
303
300
304
# build a dict of data that can really be sent to server
@@ -446,9 +450,21 @@ def Team(self, id=None, **kwargs):
446
450
"""
447
451
return self ._getListOrObject (Team , id , ** kwargs )
448
452
453
+
449
454
def _get_display_encoding ():
450
455
return sys .stdout .encoding or sys .getdefaultencoding ()
451
456
457
+
458
+ def _sanitize (value ):
459
+ if type (value ) in (str , unicode ):
460
+ return value .replace ('/' , '%2F' )
461
+ return value
462
+
463
+
464
+ def _sanitize_dict (src ):
465
+ return {k :_sanitize (v ) for k , v in src .items ()}
466
+
467
+
452
468
class GitlabObject (object ):
453
469
_url = None
454
470
_returnClass = None
0 commit comments