@@ -695,12 +695,24 @@ def list(cls, gl, **kwargs):
695
695
696
696
return gl .list (cls , ** kwargs )
697
697
698
+ @classmethod
699
+ def get (cls , gl , id , ** kwargs ):
700
+ if cls .canGet is True :
701
+ return cls (gl , id , ** kwargs )
702
+ elif cls .canGet == 'from_list' :
703
+ for obj in cls .list (gl , ** kwargs ):
704
+ obj_id = getattr (obj , obj .idAttr )
705
+ if str (obj_id ) == str (id ):
706
+ return obj
707
+
708
+ raise GitlabGetError ("Object not found" )
709
+
698
710
@classmethod
699
711
def _get_list_or_object (cls , gl , id , ** kwargs ):
700
712
if id is None and cls .getListWhenNoId :
701
713
return cls .list (gl , ** kwargs )
702
714
else :
703
- return cls (gl , id , ** kwargs )
715
+ return cls . get (gl , id , ** kwargs )
704
716
705
717
def _get_object (self , k , v ):
706
718
if self ._constructorTypes and k in self ._constructorTypes :
@@ -834,7 +846,7 @@ def json(self):
834
846
835
847
class UserKey (GitlabObject ):
836
848
_url = '/users/%(user_id)s/keys'
837
- canGet = False
849
+ canGet = 'from_list'
838
850
canUpdate = False
839
851
requiredUrlAttrs = ['user_id' ]
840
852
requiredCreateAttrs = ['title' , 'key' ]
@@ -882,7 +894,7 @@ def Key(self, id=None, **kwargs):
882
894
883
895
class GroupMember (GitlabObject ):
884
896
_url = '/groups/%(group_id)s/members'
885
- canGet = False
897
+ canGet = 'from_list'
886
898
requiredUrlAttrs = ['group_id' ]
887
899
requiredCreateAttrs = ['access_level' , 'user_id' ]
888
900
requiredUpdateAttrs = ['access_level' ]
@@ -928,7 +940,7 @@ class Issue(GitlabObject):
928
940
_url = '/issues'
929
941
_constructorTypes = {'author' : 'User' , 'assignee' : 'User' ,
930
942
'milestone' : 'ProjectMilestone' }
931
- canGet = False
943
+ canGet = 'from_list'
932
944
canDelete = False
933
945
canUpdate = False
934
946
canCreate = False
@@ -997,7 +1009,7 @@ class ProjectKey(GitlabObject):
997
1009
998
1010
class ProjectEvent (GitlabObject ):
999
1011
_url = '/projects/%(project_id)s/events'
1000
- canGet = False
1012
+ canGet = 'from_list'
1001
1013
canDelete = False
1002
1014
canUpdate = False
1003
1015
canCreate = False
@@ -1073,7 +1085,7 @@ class ProjectNote(GitlabObject):
1073
1085
class ProjectTag (GitlabObject ):
1074
1086
_url = '/projects/%(project_id)s/repository/tags'
1075
1087
idAttr = 'name'
1076
- canGet = False
1088
+ canGet = 'from_list'
1077
1089
canDelete = False
1078
1090
canUpdate = False
1079
1091
requiredUrlAttrs = ['project_id' ]
0 commit comments