diff options
Diffstat (limited to 'gitlab/objects.py')
-rw-r--r-- | gitlab/objects.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gitlab/objects.py b/gitlab/objects.py index 8247a93..9ab1dc0 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -378,6 +378,22 @@ class GitlabObject(object): data = self.gitlab.get(self.__class__, data, **kwargs) self._from_api = True + # the API returned a list because custom kwargs where used + # instead of the id to request an object. Usually parameters + # other than an id return ambiguous results. However in the + # gitlab universe iids together with a project_id are + # unambiguous for merge requests and issues, too. + # So if there is only one element we can use it as our data + # source. + if 'iid' in kwargs and isinstance(data, list): + if len(data) < 1: + raise GitlabGetError('Not found') + elif len(data) == 1: + data = data[0] + else: + raise GitlabGetError('Impossible! You found multiple' + ' elements with the same iid.') + self._set_from_dict(data, **kwargs) if kwargs: |