@@ -471,16 +471,18 @@ def delete(self, obj, id=None, **kwargs):
471
471
if inspect .isclass (obj ):
472
472
if not issubclass (obj ,GitlabObject ):
473
473
raise GitlabError ("Invalid class: %s" % obj )
474
- params = {}
475
- params [obj .idAttr ]= id
476
- else :
477
- params = obj .__dict__ .copy ()
474
+
475
+ params = {obj .idAttr :id if id else getattr (obj ,obj .idAttr )}
478
476
params .update (kwargs )
477
+
479
478
missing = []
480
479
for k in itertools .chain (obj .requiredUrlAttrs ,
481
480
obj .requiredDeleteAttrs ):
482
481
if k not in params :
483
- missing .append (k )
482
+ try :
483
+ params [k ]= getattr (obj ,k )
484
+ except KeyError :
485
+ missing .append (k )
484
486
if missing :
485
487
raise GitlabDeleteError ('Missing attribute(s): %s' %
486
488
", " .join (missing ))
@@ -493,6 +495,10 @@ def delete(self, obj, id=None, **kwargs):
493
495
# url-parameters left
494
496
for attribute in obj .requiredUrlAttrs :
495
497
del params [attribute ]
498
+ if obj ._id_in_delete_url :
499
+ # The ID is already built, no need to add it as extra key in query
500
+ # string
501
+ params .pop (obj .idAttr )
496
502
497
503
try :
498
504
r = self .session .delete (url ,