Skip to content

Commit 5dda6e6

Browse files
author
Gauvain Pocentek
committed
setup a list of mandatory attributes for list and get methods
1 parent a8072d9 commit 5dda6e6

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

gitlab.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ class GitlabConnectionError(Exception):
4040
pass
4141

4242

43+
class GitlabListError(Exception):
44+
pass
45+
46+
4347
class GitlabGetError(Exception):
4448
pass
4549

@@ -166,6 +170,14 @@ def rawPut(self, path, with_token=False):
166170
return r
167171

168172
def list(self, obj_class, **kwargs):
173+
missing = []
174+
for k in obj_class.requiredListAttrs:
175+
if k not in kwargs:
176+
missing.append (k)
177+
if missing:
178+
raise GitlabListError('Missing attribute(s): %s' % \
179+
", ".join(missing))
180+
169181
url = obj_class._url
170182
if kwargs:
171183
url = obj_class._url % kwargs
@@ -198,6 +210,14 @@ def list(self, obj_class, **kwargs):
198210
raise GitlabGetError('%d: %s' % (r.status_code, r.text))
199211

200212
def get(self, obj_class, id=None, **kwargs):
213+
missing = []
214+
for k in obj_class.requiredGetAttrs:
215+
if k not in kwargs:
216+
missing.append (k)
217+
if missing:
218+
raise GitlabListError('Missing attribute(s): %s' % \
219+
", ".join(missing))
220+
201221
url = obj_class._url
202222
if kwargs:
203223
url = obj_class._url % kwargs
@@ -370,6 +390,8 @@ class GitlabObject(object):
370390
canCreate = True
371391
canUpdate = True
372392
canDelete = True
393+
requiredListAttrs = []
394+
requiredGetAttrs = []
373395
requiredCreateAttrs = []
374396
optionalCreateAttrs = []
375397

@@ -541,6 +563,8 @@ class ProjectBranch(GitlabObject):
541563
canDelete = False
542564
canUpdate = False
543565
canCreate = False
566+
requiredGetAttrs = ['project_id']
567+
requiredListAttrs = ['project_id']
544568

545569
def protect(self, protect=True):
546570
url = self._url % {'project_id': self.project_id}
@@ -568,16 +592,21 @@ class ProjectCommit(GitlabObject):
568592
canDelete = False
569593
canUpdate = False
570594
canCreate = False
595+
requiredListAttrs = ['project_id']
571596

572597

573598
class ProjectKey(GitlabObject):
574599
_url = '/projects/%(project_id)s/keys'
575600
canUpdate = False
601+
requiredListAttrs = ['project_id']
602+
requiredGetAttrs = ['project_id']
576603
requiredCreateAttrs = ['project_id', 'title', 'key']
577604

578605

579606
class ProjectHook(GitlabObject):
580607
_url = '/projects/%(project_id)s/hooks'
608+
requiredListAttrs = ['project_id']
609+
requiredGetAttrs = ['project_id']
581610
requiredCreateAttrs = ['project_id', 'url']
582611

583612

@@ -586,6 +615,8 @@ class ProjectIssueNote(GitlabObject):
586615
_constructorTypes = {'author': 'User'}
587616
canUpdate = False
588617
canDelete = False
618+
requiredListAttrs = ['project_id', 'issue_id']
619+
requiredGetAttrs = ['project_id', 'issue_id']
589620
requiredCreateAttrs = ['project_id', 'body']
590621

591622

@@ -594,6 +625,8 @@ class ProjectIssue(GitlabObject):
594625
_constructorTypes = {'author': 'User', 'assignee': 'User',
595626
'milestone': 'ProjectMilestone'}
596627
canDelete = False
628+
requiredListAttrs = ['project_id']
629+
requiredGetAttrs = ['project_id']
597630
requiredCreateAttrs = ['project_id', 'title']
598631
optionalCreateAttrs = ['description', 'assignee_id', 'milestone_id',
599632
'labels']
@@ -608,6 +641,8 @@ def Note(self, id=None, **kwargs):
608641
class ProjectMember(GitlabObject):
609642
_url = '/projects/%(project_id)s/members'
610643
_returnClass = User
644+
requiredListAttrs = ['project_id']
645+
requiredGetAttrs = ['project_id']
611646
requiredCreateAttrs = ['project_id', 'user_id', 'access_level']
612647

613648

@@ -616,6 +651,8 @@ class ProjectNote(GitlabObject):
616651
_constructorTypes = {'author': 'User'}
617652
canUpdate = False
618653
canDelete = False
654+
requiredListAttrs = ['project_id']
655+
requiredGetAttrs = ['project_id']
619656
requiredCreateAttrs = ['project_id', 'body']
620657

621658

@@ -625,6 +662,7 @@ class ProjectTag(GitlabObject):
625662
canDelete = False
626663
canUpdate = False
627664
canCreate = False
665+
requiredListAttrs = ['project_id']
628666

629667

630668
class ProjectMergeRequestNote(GitlabObject):
@@ -634,12 +672,15 @@ class ProjectMergeRequestNote(GitlabObject):
634672
canCreate = False
635673
canUpdate = False
636674
canDelete = False
675+
requiredListAttrs = ['project_id', 'merge_request_id']
637676

638677

639678
class ProjectMergeRequest(GitlabObject):
640679
_url = '/projects/%(project_id)s/merge_request'
641680
_constructorTypes = {'author': 'User', 'assignee': 'User'}
642681
canDelete = False
682+
requiredListAttrs = ['project_id']
683+
requiredGetAttrs = ['project_id']
643684
requiredCreateAttrs = ['project_id', 'source_branch', 'target_branch', 'title']
644685
optionalCreateAttrs = ['assignee_id']
645686

@@ -653,6 +694,8 @@ def Note(self, id=None, **kwargs):
653694
class ProjectMilestone(GitlabObject):
654695
_url = '/projects/%(project_id)s/milestones'
655696
canDelete = False
697+
requiredListAttrs = ['project_id']
698+
requiredGetAttrs = ['project_id']
656699
requiredCreateAttrs = ['project_id', 'title']
657700
optionalCreateAttrs = ['description', 'due_date']
658701

@@ -662,12 +705,16 @@ class ProjectSnippetNote(GitlabObject):
662705
_constructorTypes = {'author': 'User'}
663706
canUpdate = False
664707
canDelete = False
708+
requiredListAttrs = ['project_id', 'snippet_id']
709+
requiredGetAttrs = ['project_id', 'snippet_id']
665710
requiredCreateAttrs = ['project_id', 'snippet_id', 'body']
666711

667712

668713
class ProjectSnippet(GitlabObject):
669714
_url = '/projects/%(project_id)s/snippets'
670715
_constructorTypes = {'author': 'User'}
716+
requiredListAttrs = ['project_id']
717+
requiredGetAttrs = ['project_id']
671718
requiredCreateAttrs = ['project_id', 'title', 'file_name', 'code']
672719
optionalCreateAttrs = ['lifetime']
673720

0 commit comments

Comments
 (0)