@@ -70,7 +70,12 @@ def list(self, objClass, **kwargs):
70
70
cls = objClass
71
71
if objClass .returnClass :
72
72
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
74
79
else :
75
80
raise GitlabGetError ('%d: %s' % (r .status_code , r .text ))
76
81
@@ -90,7 +95,11 @@ def get(self, objClass, id, **kwargs):
90
95
if objClass .returnClass :
91
96
cls = objClass .returnClass
92
97
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
94
103
else :
95
104
raise GitlabGetError ('%d: %s' % (r .status_code , r .text ))
96
105
@@ -211,6 +220,12 @@ def delete(cls, gl, id, **kwargs):
211
220
212
221
return gl .delete (cls , id , ** kwargs )
213
222
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
+
214
229
def getObject (self , k , v ):
215
230
if self .constructorTypes and k in self .constructorTypes :
216
231
return globals ()[self .constructorTypes [k ]](self .gitlab , v )
@@ -224,7 +239,6 @@ def __init__(self, gl, data):
224
239
self .__dict__ [k ] = []
225
240
for i in v :
226
241
self .__dict__ [k ].append (self .getObject (k ,i ))
227
-
228
242
else :
229
243
self .__dict__ [k ] = self .getObject (k ,v )
230
244
@@ -284,17 +298,21 @@ class ProjectCommit(GitlabObject):
284
298
class ProjectHook (GitlabObject ):
285
299
url = '/projects/%(project_id)d/hooks'
286
300
287
- class ProjectIssue (GitlabObject ):
288
- url = '/projects/%(project_id)s/issues/'
289
- returnClass = Issue
290
- canDelete = False
291
-
292
301
class ProjectIssueNote (GitlabObject ):
293
302
url = '/projects/%(project_id)d/issues/%(issue_id)d/notes'
294
303
constructorTypes = {'author' : 'User' }
295
304
canUpdate = False
296
305
canDelete = False
297
306
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
+
298
316
class ProjectMember (GitlabObject ):
299
317
url = '/projects/%(project_id)d/members'
300
318
returnClass = User
@@ -312,11 +330,6 @@ class ProjectTag(GitlabObject):
312
330
canUpdate = False
313
331
canCreate = False
314
332
315
- class ProjectMergeRequest (GitlabObject ):
316
- url = '/projects/%(project_id)d/merge_request'
317
- constructorTypes = {'author' : 'User' , 'assignee' : 'User' }
318
- canDelete = False
319
-
320
333
class ProjectMergeRequestNote (GitlabObject ):
321
334
url = '/projects/%(project_id)d/merge_requests/%(merge_request_id)d/notes'
322
335
constructorTypes = {'author' : 'User' }
@@ -325,58 +338,68 @@ class ProjectMergeRequestNote(GitlabObject):
325
338
canUpdate = False
326
339
canDelete = False
327
340
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
+
328
350
class ProjectMilestone (GitlabObject ):
329
351
url = '/projects/%(project_id)s/milestones'
330
352
canDelete = False
331
353
332
- class ProjectSnippet (GitlabObject ):
333
- url = '/projects/%(project_id)d/snippets'
334
- constructorTypes = {'author' : 'User' }
335
-
336
354
class ProjectSnippetNote (GitlabObject ):
337
355
url = '/projects/%(project_id)d/snippets/%(snippet_id)d/notes'
338
356
constructorTypes = {'author' : 'User' }
339
357
canUpdate = False
340
358
canDelete = False
341
359
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
+
342
368
class Project (GitlabObject ):
343
369
url = '/projects'
344
370
constructorTypes = {'owner' : 'User' , 'namespace' : 'Group' }
345
371
canUpdate = False
346
372
canDelete = False
347
373
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
-
354
374
def Branch (self , id = None ):
355
- return self .objGetter (ProjectBranch , id )
375
+ return self .getListOrObject (ProjectBranch , id , project_id = self . id )
356
376
357
377
def Commit (self , id = None ):
358
- return self .objGetter (ProjectCommit , id )
378
+ return self .getListOrObject (ProjectCommit , id , project_id = self . id )
359
379
360
380
def Hook (self , id = None ):
361
- return self .objGetter (ProjectHook , id )
381
+ return self .getListOrObject (ProjectHook , id , project_id = self . id )
362
382
363
383
def Issue (self , id = None ):
364
- return self .objGetter (ProjectIssue , id )
384
+ return self .getListOrObject (ProjectIssue , id , project_id = self . id )
365
385
366
386
def Member (self , id = None ):
367
- return self .objGetter (ProjectMember , id )
387
+ return self .getListOrObject (ProjectMember , id , project_id = self . id )
368
388
369
389
def MergeRequest (self , id = None ):
370
- return self .objGetter (ProjectMergeRequest , id )
390
+ return self .getListOrObject (ProjectMergeRequest , id , project_id = self . id )
371
391
372
392
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 )
374
397
375
398
def Snippet (self , id = None ):
376
- return self .objGetter (ProjectSnippet , id )
399
+ return self .getListOrObject (ProjectSnippet , id , project_id = self . id )
377
400
378
401
def Tag (self , id = None ):
379
- return self .objGetter (ProjectTag , id )
402
+ return self .getListOrObject (ProjectTag , id , project_id = self . id )
380
403
381
404
if __name__ == '__main__' :
382
405
# quick "doc"
0 commit comments