@@ -70,7 +70,12 @@ def list(self, objClass, **kwargs):
7070 cls = objClass
7171 if objClass .returnClass :
7272 cls = objClass .returnClass
73- return [cls (self , item ) for item in r .json ]
73+ l = [cls (self , item ) for item in r .json ]
74+ if kwargs :
75+ for k ,v in kwargs .items ():
76+ for obj in l :
77+ obj .__dict__ [k ] = v
78+ return l
7479 else :
7580 raise GitlabGetError ('%d: %s' % (r .status_code , r .text ))
7681
@@ -90,7 +95,11 @@ def get(self, objClass, id, **kwargs):
9095 if objClass .returnClass :
9196 cls = objClass .returnClass
9297
93- return cls (self , r .json )
98+ obj = cls (self , r .json )
99+ if kwargs :
100+ for k ,v in kwargs .items ():
101+ obj .__dict__ [k ] = v
102+ return obj
94103 else :
95104 raise GitlabGetError ('%d: %s' % (r .status_code , r .text ))
96105
@@ -211,6 +220,12 @@ def delete(cls, gl, id, **kwargs):
211220
212221 return gl .delete (cls , id , ** kwargs )
213222
223+ def getListOrObject (self , cls , id , ** kwargs ):
224+ if id == None :
225+ return cls .list (self .gitlab , ** kwargs )
226+ else :
227+ return cls .get (self .gitlab , id , ** kwargs )
228+
214229 def getObject (self , k , v ):
215230 if self .constructorTypes and k in self .constructorTypes :
216231 return globals ()[self .constructorTypes [k ]](self .gitlab , v )
@@ -224,7 +239,6 @@ def __init__(self, gl, data):
224239 self .__dict__ [k ] = []
225240 for i in v :
226241 self .__dict__ [k ].append (self .getObject (k ,i ))
227-
228242 else :
229243 self .__dict__ [k ] = self .getObject (k ,v )
230244
@@ -284,17 +298,21 @@ class ProjectCommit(GitlabObject):
284298class ProjectHook (GitlabObject ):
285299 url = '/projects/%(project_id)d/hooks'
286300
287- class ProjectIssue (GitlabObject ):
288- url = '/projects/%(project_id)s/issues/'
289- returnClass = Issue
290- canDelete = False
291-
292301class ProjectIssueNote (GitlabObject ):
293302 url = '/projects/%(project_id)d/issues/%(issue_id)d/notes'
294303 constructorTypes = {'author' : 'User' }
295304 canUpdate = False
296305 canDelete = False
297306
307+ class ProjectIssue (GitlabObject ):
308+ url = '/projects/%(project_id)s/issues/'
309+ constructorTypes = {'author' : 'User' , 'assignee' : 'User' ,
310+ 'milestone' : 'ProjectMilestone' }
311+ canDelete = False
312+
313+ def Note (self , id = None ):
314+ return self .getListOrObject (ProjectIssueNote , id , project_id = self .id , issue_id = self .id )
315+
298316class ProjectMember (GitlabObject ):
299317 url = '/projects/%(project_id)d/members'
300318 returnClass = User
@@ -312,11 +330,6 @@ class ProjectTag(GitlabObject):
312330 canUpdate = False
313331 canCreate = False
314332
315- class ProjectMergeRequest (GitlabObject ):
316- url = '/projects/%(project_id)d/merge_request'
317- constructorTypes = {'author' : 'User' , 'assignee' : 'User' }
318- canDelete = False
319-
320333class ProjectMergeRequestNote (GitlabObject ):
321334 url = '/projects/%(project_id)d/merge_requests/%(merge_request_id)d/notes'
322335 constructorTypes = {'author' : 'User' }
@@ -325,58 +338,68 @@ class ProjectMergeRequestNote(GitlabObject):
325338 canUpdate = False
326339 canDelete = False
327340
341+ class ProjectMergeRequest (GitlabObject ):
342+ url = '/projects/%(project_id)d/merge_request'
343+ constructorTypes = {'author' : 'User' , 'assignee' : 'User' }
344+ canDelete = False
345+
346+ def Note (self , id = None ):
347+ return self .getListOrObject (ProjectMergeRequestNote , id ,
348+ project_id = self .id , merge_request_id = self .id )
349+
328350class ProjectMilestone (GitlabObject ):
329351 url = '/projects/%(project_id)s/milestones'
330352 canDelete = False
331353
332- class ProjectSnippet (GitlabObject ):
333- url = '/projects/%(project_id)d/snippets'
334- constructorTypes = {'author' : 'User' }
335-
336354class ProjectSnippetNote (GitlabObject ):
337355 url = '/projects/%(project_id)d/snippets/%(snippet_id)d/notes'
338356 constructorTypes = {'author' : 'User' }
339357 canUpdate = False
340358 canDelete = False
341359
360+ class ProjectSnippet (GitlabObject ):
361+ url = '/projects/%(project_id)d/snippets'
362+ constructorTypes = {'author' : 'User' }
363+
364+ def Note (self , id = None ):
365+ return self .getListOrObject (ProjectSnippetNote , id ,
366+ project_id = self .id , snippet_id = self .id )
367+
342368class Project (GitlabObject ):
343369 url = '/projects'
344370 constructorTypes = {'owner' : 'User' , 'namespace' : 'Group' }
345371 canUpdate = False
346372 canDelete = False
347373
348- def objGetter (self , cls , id ):
349- if id == None :
350- return cls .list (self .gitlab , project_id = self .id )
351- else :
352- return cls .get (self .gitlab , id , project_id = self .id )
353-
354374 def Branch (self , id = None ):
355- return self .objGetter (ProjectBranch , id )
375+ return self .getListOrObject (ProjectBranch , id , project_id = self . id )
356376
357377 def Commit (self , id = None ):
358- return self .objGetter (ProjectCommit , id )
378+ return self .getListOrObject (ProjectCommit , id , project_id = self . id )
359379
360380 def Hook (self , id = None ):
361- return self .objGetter (ProjectHook , id )
381+ return self .getListOrObject (ProjectHook , id , project_id = self . id )
362382
363383 def Issue (self , id = None ):
364- return self .objGetter (ProjectIssue , id )
384+ return self .getListOrObject (ProjectIssue , id , project_id = self . id )
365385
366386 def Member (self , id = None ):
367- return self .objGetter (ProjectMember , id )
387+ return self .getListOrObject (ProjectMember , id , project_id = self . id )
368388
369389 def MergeRequest (self , id = None ):
370- return self .objGetter (ProjectMergeRequest , id )
390+ return self .getListOrObject (ProjectMergeRequest , id , project_id = self . id )
371391
372392 def Milestone (self , id = None ):
373- return self .objGetter (ProjectMilestone , id )
393+ return self .getListOrObject (ProjectMilestone , id , project_id = self .id )
394+
395+ def Note (self , id = None ):
396+ return self .getListOrObject (ProjectNote , id , project_id = self .id )
374397
375398 def Snippet (self , id = None ):
376- return self .objGetter (ProjectSnippet , id )
399+ return self .getListOrObject (ProjectSnippet , id , project_id = self . id )
377400
378401 def Tag (self , id = None ):
379- return self .objGetter (ProjectTag , id )
402+ return self .getListOrObject (ProjectTag , id , project_id = self . id )
380403
381404if __name__ == '__main__' :
382405 # quick "doc"
0 commit comments