diff options
author | Gauvain Pocentek <gauvain@pocentek.net> | 2017-06-11 12:10:56 +0200 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2017-06-11 12:10:56 +0200 |
commit | 3488c5cf137b0dbe6e96a4412698bafaaa640143 (patch) | |
tree | 154a42fffad50ca4b189f1d7d291c89bc850e85c | |
parent | 68f411478f0d693f7d37436a9280847cb610a15b (diff) | |
download | gitlab-3488c5cf137b0dbe6e96a4412698bafaaa640143.tar.gz |
Fix a few remaining methods
-rw-r--r-- | gitlab/base.py | 12 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 150 |
2 files changed, 62 insertions, 100 deletions
diff --git a/gitlab/base.py b/gitlab/base.py index c318c1d..d72a933 100644 --- a/gitlab/base.py +++ b/gitlab/base.py @@ -552,6 +552,7 @@ class RESTObject(object): '_updated_attrs': {}, '_module': importlib.import_module(self.__module__) }) + self.__dict__['_parent_attrs'] = self.manager.parent_attrs # TODO(gpocentek): manage the creation of new objects from the received # data (_constructor_types) @@ -565,7 +566,10 @@ class RESTObject(object): try: return self.__dict__['_attrs'][name] except KeyError: - raise AttributeError(name) + try: + return self.__dict__['_parent_attrs'][name] + except: + raise AttributeError(name) def __setattr__(self, name, value): self.__dict__['_updated_attrs'][name] = value @@ -660,7 +664,12 @@ class RESTManager(object): self._parent = parent # for nested managers self._computed_path = self._compute_path() + @property + def parent_attrs(self): + return self._parent_attrs + def _compute_path(self, path=None): + self._parent_attrs = {} if path is None: path = self._path if self._parent is None or not hasattr(self, '_from_parent_attrs'): @@ -668,6 +677,7 @@ class RESTManager(object): data = {self_attr: getattr(self._parent, parent_attr) for self_attr, parent_attr in self._from_parent_attrs.items()} + self._parent_attrs = data return path % data @property diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 8eb977b..e9d1d03 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -906,44 +906,35 @@ class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin, self._update_attrs(server_data) def closes_issues(self, **kwargs): - """List issues closed by the MR. + """List issues that will close on merge." Returns: - list (ProjectIssue): List of closed issues - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabGetError: If the server fails to perform the request. + list (ProjectIssue): List of issues """ - # FIXME(gpocentek) - url = ('/projects/%s/merge_requests/%s/closes_issues' % - (self.project_id, self.iid)) - return self.gitlab._raw_list(url, ProjectIssue, **kwargs) + path = '%s/%s/closes_issues' % (self.manager.path, self.get_id()) + data_list = self.manager.gitlab.http_list(path, **kwargs) + manager = ProjectIssueManager(self.manager.gitlab, + parent=self.manager._parent) + return RESTObjectList(manager, ProjectIssue, data_list) def commits(self, **kwargs): """List the merge request commits. Returns: list (ProjectCommit): List of commits - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabListError: If the server fails to perform the request. """ - # FIXME(gpocentek) - url = ('/projects/%s/merge_requests/%s/commits' % - (self.project_id, self.iid)) - return self.gitlab._raw_list(url, ProjectCommit, **kwargs) + + path = '%s/%s/commits' % (self.manager.path, self.get_id()) + data_list = self.manager.gitlab.http_list(path, **kwargs) + manager = ProjectCommitManager(self.manager.gitlab, + parent=self.manager._parent) + return RESTObjectList(manager, ProjectCommit, data_list) def changes(self, **kwargs): """List the merge request changes. Returns: list (dict): List of changes - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabListError: If the server fails to perform the request. """ path = '%s/%s/changes' % (self.manager.path, self.get_id()) return self.manager.gitlab.http_get(path, **kwargs) @@ -960,14 +951,6 @@ class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin, branch merged_when_build_succeeds (bool): Wait for the build to succeed, then merge - - Returns: - ProjectMergeRequest: The updated MR - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabMRForbiddenError: If the user doesn't have permission to - close thr MR - GitlabMRClosedError: If the MR is already closed """ path = '%s/%s/merge' % (self.manager.path, self.get_id()) data = {} @@ -1002,23 +985,31 @@ class ProjectMilestone(SaveMixin, RESTObject): _short_print_attr = 'title' def issues(self, **kwargs): - url = '/projects/%s/milestones/%s/issues' % (self.project_id, self.id) - return self.gitlab._raw_list(url, ProjectIssue, **kwargs) + """List issues related to this milestone + + Returns: + list (ProjectIssue): The list of issues + """ + + path = '%s/%s/issues' % (self.manager.path, self.get_id()) + data_list = self.manager.gitlab.http_list(path, **kwargs) + manager = ProjectCommitManager(self.manager.gitlab, + parent=self.manager._parent) + # FIXME(gpocentek): the computed manager path is not correct + return RESTObjectList(manager, ProjectIssue, data_list) def merge_requests(self, **kwargs): """List the merge requests related to this milestone Returns: list (ProjectMergeRequest): List of merge requests - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabListError: If the server fails to perform the request. """ - # FIXME(gpocentek) - url = ('/projects/%s/milestones/%s/merge_requests' % - (self.project_id, self.id)) - return self.gitlab._raw_list(url, ProjectMergeRequest, **kwargs) + path = '%s/%s/merge_requests' % (self.manager.path, self.get_id()) + data_list = self.manager.gitlab.http_list(path, **kwargs) + manager = ProjectCommitManager(self.manager.gitlab, + parent=self.manager._parent) + # FIXME(gpocentek): the computed manager path is not correct + return RESTObjectList(manager, ProjectMergeRequest, data_list) class ProjectMilestoneManager(RetrieveMixin, CreateMixin, DeleteMixin, @@ -1425,20 +1416,29 @@ class Project(SaveMixin, RESTObject): Returns: str: The json representation of the tree. - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabGetError: If the server fails to perform the request. """ - path = '/projects/%s/repository/tree' % self.get_id() + gl_path = '/projects/%s/repository/tree' % self.get_id() query_data = {} if path: query_data['path'] = path if ref: query_data['ref'] = ref - return self.manager.gitlab.http_get(path, query_data=query_data, + return self.manager.gitlab.http_get(gl_path, query_data=query_data, **kwargs) + def repository_blob(self, sha, **kwargs): + """Returns a blob by blob SHA. + + Args: + sha(str): ID of the blob + + Returns: + str: The blob as json + """ + + path = '/projects/%s/repository/blobs/%s' % (self.get_id(), sha) + return self.manager.gitlab.http_get(path, **kwargs) + def repository_raw_blob(self, sha, streamed=False, action=None, chunk_size=1024, **kwargs): """Returns the raw file contents for a blob by blob SHA. @@ -1454,13 +1454,9 @@ class Project(SaveMixin, RESTObject): Returns: str: The blob content - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabGetError: If the server fails to perform the request. """ - path = '/projects/%s/repository/raw_blobs/%s' % (self.get_id(), sha) - result = self.gitlab._raw_get(path, streamed=streamed, **kwargs) + path = '/projects/%s/repository/blobs/%s/raw' % (self.get_id(), sha) + result = self.manager.gitlab.http_get(path, streamed=streamed, **kwargs) return utils.response_content(result, streamed, action, chunk_size) def repository_compare(self, from_, to, **kwargs): @@ -1472,10 +1468,6 @@ class Project(SaveMixin, RESTObject): Returns: str: The diff - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabGetError: If the server fails to perform the request. """ path = '/projects/%s/repository/compare' % self.get_id() query_data = {'from': from_, 'to': to} @@ -1486,11 +1478,7 @@ class Project(SaveMixin, RESTObject): """Returns a list of contributors for the project. Returns: - list: The contibutors - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabGetError: If the server fails to perform the request. + list: The contributors """ path = '/projects/%s/repository/contributors' % self.get_id() return self.manager.gitlab.http_get(path, **kwargs) @@ -1510,17 +1498,13 @@ class Project(SaveMixin, RESTObject): Returns: str: The binary data of the archive. - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabGetError: If the server fails to perform the request. """ path = '/projects/%s/repository/archive' % self.get_id() query_data = {} if sha: query_data['sha'] = sha - result = self.gitlab._raw_get(path, query_data=query_data, - streamed=streamed, **kwargs) + result = self.manager.gitlab.http_get(path, query_data=query_data, + streamed=streamed, **kwargs) return utils.response_content(result, streamed, action, chunk_size) def create_fork_relation(self, forked_from_id, **kwargs): @@ -1528,20 +1512,12 @@ class Project(SaveMixin, RESTObject): Args: forked_from_id (int): The ID of the project that was forked from - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabCreateError: If the server fails to perform the request. """ path = '/projects/%s/fork/%s' % (self.get_id(), forked_from_id) self.manager.gitlab.http_post(path, **kwargs) def delete_fork_relation(self, **kwargs): """Delete a forked relation between existing projects. - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabDeleteError: If the server fails to perform the request. """ path = '/projects/%s/fork' % self.get_id() self.manager.gitlab.http_delete(path, **kwargs) @@ -1551,10 +1527,6 @@ class Project(SaveMixin, RESTObject): Returns: Project: the updated Project - - Raises: - GitlabCreateError: If the action cannot be done - GitlabConnectionError: If the server cannot be reached. """ path = '/projects/%s/star' % self.get_id() server_data = self.manager.gitlab.http_post(path, **kwargs) @@ -1565,10 +1537,6 @@ class Project(SaveMixin, RESTObject): Returns: Project: the updated Project - - Raises: - GitlabDeleteError: If the action cannot be done - GitlabConnectionError: If the server cannot be reached. """ path = '/projects/%s/unstar' % self.get_id() server_data = self.manager.gitlab.http_post(path, **kwargs) @@ -1579,10 +1547,6 @@ class Project(SaveMixin, RESTObject): Returns: Project: the updated Project - - Raises: - GitlabCreateError: If the action cannot be done - GitlabConnectionError: If the server cannot be reached. """ path = '/projects/%s/archive' % self.get_id() server_data = self.manager.gitlab.http_post(path, **kwargs) @@ -1593,10 +1557,6 @@ class Project(SaveMixin, RESTObject): Returns: Project: the updated Project - - Raises: - GitlabDeleteError: If the action cannot be done - GitlabConnectionError: If the server cannot be reached. """ path = '/projects/%s/unarchive' % self.get_id() server_data = self.manager.gitlab.http_post(path, **kwargs) @@ -1608,10 +1568,6 @@ class Project(SaveMixin, RESTObject): Args: group_id (int): ID of the group. group_access (int): Access level for the group. - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabCreateError: If the server fails to perform the request. """ path = '/projects/%s/share' % self.get_id() data = {'group_id': group_id, @@ -1628,10 +1584,6 @@ class Project(SaveMixin, RESTObject): ref (str): Commit to build; can be a commit SHA, a branch name, ... token (str): The trigger token variables (dict): Variables passed to the build script - - Raises: - GitlabConnectionError: If the server cannot be reached. - GitlabCreateError: If the server fails to perform the request. """ path = '/projects/%s/trigger/pipeline' % self.get_id() form = {r'variables[%s]' % k: v for k, v in six.iteritems(variables)} |