From 23b5b6e583c257821bea077096378df2fc20fde6 Mon Sep 17 00:00:00 2001 From: Philipp Busch Date: Sat, 22 Oct 2016 14:49:48 +0200 Subject: [PATCH] Convert response list to single data source for iid requests --- gitlab/objects.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gitlab/objects.py b/gitlab/objects.py index 8247a936a..9ab1dc0b1 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -378,6 +378,22 @@ def __init__(self, gl, data=None, **kwargs): 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: