Skip to content

Commit bf25928

Browse files
author
Gauvain Pocentek
committed
create Note classes linked to parent objetcs
1 parent 0172900 commit bf25928

File tree

1 file changed

+55
-32
lines changed

1 file changed

+55
-32
lines changed

gitlab.py

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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):
284298
class 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-
292301
class 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+
298316
class 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-
320333
class 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+
328350
class 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-
336354
class 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+
342368
class 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

381404
if __name__ == '__main__':
382405
# quick "doc"

0 commit comments

Comments
 (0)