diff options
author | Gauvain Pocentek <gauvain@pocentek.net> | 2016-08-27 22:21:49 +0200 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2016-08-27 22:21:49 +0200 |
commit | 8257400fd78e0fdc26fdcb207dbc6e923332e209 (patch) | |
tree | 5984672107fc68f0f9b6f7889b3b26f2393efe23 | |
parent | ef2dbf7034aee21ecf225be5cfefee8ab4379bbe (diff) | |
download | gitlab-8257400fd78e0fdc26fdcb207dbc6e923332e209.tar.gz |
Add support for project pipelines
-rw-r--r-- | docs/gl_objects/projects.py | 20 | ||||
-rw-r--r-- | docs/gl_objects/projects.rst | 31 | ||||
-rw-r--r-- | gitlab/__init__.py | 3 | ||||
-rw-r--r-- | gitlab/exceptions.py | 20 | ||||
-rw-r--r-- | gitlab/objects.py | 38 |
5 files changed, 110 insertions, 2 deletions
diff --git a/docs/gl_objects/projects.py b/docs/gl_objects/projects.py index 0143e31..2695747 100644 --- a/docs/gl_objects/projects.py +++ b/docs/gl_objects/projects.py @@ -382,3 +382,23 @@ service.save() # service delete service.delete() # end service delete + +# pipeline list +pipelines = gl.project_pipelines.list(project_id=1) +# or +pipelines = project.pipelines.list() +# end pipeline list + +# pipeline get +pipeline = gl.project_pipelines.get(pipeline_id, project_id=1) +# or +pipeline = project.pipelines.get(pipeline_id) +# end pipeline get + +# pipeline retry +pipeline.retry() +# end pipeline retry + +# pipeline cancel +pipeline.cancel() +# end pipeline cancel diff --git a/docs/gl_objects/projects.rst b/docs/gl_objects/projects.rst index 5d8e61f..387ba34 100644 --- a/docs/gl_objects/projects.rst +++ b/docs/gl_objects/projects.rst @@ -395,6 +395,37 @@ Delete a project hook: :start-after: # hook delete :end-before: # end hook delete +Pipelines +--------- + +Use :class:`~gitlab.objects.ProjectPipeline` objects to manipulate projects +pipelines. The :attr:`gitlab.Gitlab.project_pipelines` and +:attr:`Project.services <gitlab.objects.Projects.pipelines>` manager objects +provide helper functions. + +List pipelines for a project: + +.. literalinclude:: projects.py + :start-after: # pipeline list + :end-before: # end pipeline list + +Get a pipeline for a project: + +.. literalinclude:: projects.py + :start-after: # pipeline get + :end-before: # end pipeline get + +Retry the failed builds for a pipeline: + +.. literalinclude:: projects.py + :start-after: # pipeline retry + :end-before: # end pipeline retry + +Cancel builds in a pipeline: + +.. literalinclude:: projects.py + :start-after: # pipeline cancel + :end-before: # end pipeline cancel Services -------- diff --git a/gitlab/__init__.py b/gitlab/__init__.py index 70991b2..82f4918 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -102,6 +102,8 @@ class Gitlab(object): project_members (ProjectMemberManager): Manager for GitLab projects members project_notes (ProjectNoteManager): Manager for GitLab projects notes + project_pipelines (ProjectPipelineManager): Manager for GitLab projects + pipelines project_tags (ProjectTagManager): Manager for GitLab projects tags project_mergerequest_notes (ProjectMergeRequestNoteManager): Manager for GitLab notes on merge requests @@ -179,6 +181,7 @@ class Gitlab(object): self.project_issues = ProjectIssueManager(self) self.project_members = ProjectMemberManager(self) self.project_notes = ProjectNoteManager(self) + self.project_pipelines = ProjectPipelineManager(self) self.project_tags = ProjectTagManager(self) self.project_mergerequest_notes = ProjectMergeRequestNoteManager(self) self.project_mergerequests = ProjectMergeRequestManager(self) diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py index e07f0cc..7b0f7f0 100644 --- a/gitlab/exceptions.py +++ b/gitlab/exceptions.py @@ -75,11 +75,27 @@ class GitlabTransferProjectError(GitlabOperationError): pass -class GitlabBuildCancelError(GitlabOperationError): +class GitlabCancelError(GitlabOperationError): pass -class GitlabBuildRetryError(GitlabOperationError): +class GitlabBuildCancelError(GitlabCancelError): + pass + + +class GitlabPipelineCancelError(GitlabCancelError): + pass + + +class GitlabRetryError(GitlabOperationError): + pass + + +class GitlabBuildRetryError(GitlabRetryError): + pass + + +class GitlabPipelineRetryError(GitlabRetryError): pass diff --git a/gitlab/objects.py b/gitlab/objects.py index 96eab66..a3f5277 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1610,6 +1610,43 @@ class ProjectFileManager(BaseManager): obj_cls = ProjectFile +class ProjectPipeline(GitlabObject): + _url = '/projects/%(project_id)s/pipelines' + canCreate = False + canUpdate = False + canDelete = False + + def retry(self, **kwargs): + """Retries failed builds in a pipeline. + + Raises: + GitlabConnectionError: If the server cannot be reached. + GitlabPipelineRetryError: If the retry cannot be done. + """ + url = ('/projects/%(project_id)s/pipelines/%(id)s/retry' % + {'project_id': self.project_id, 'id': self.id}) + r = self.gitlab._raw_post(url, data=None, content_type=None, **kwargs) + raise_error_from_response(r, GitlabPipelineRetryError, 201) + self._set_from_dict(r.json()) + + def cancel(self, **kwargs): + """Cancel builds in a pipeline. + + Raises: + GitlabConnectionError: If the server cannot be reached. + GitlabPipelineCancelError: If the retry cannot be done. + """ + url = ('/projects/%(project_id)s/pipelines/%(id)s/cancel' % + {'project_id': self.project_id, 'id': self.id}) + r = self.gitlab._raw_post(url, data=None, content_type=None, **kwargs) + raise_error_from_response(r, GitlabPipelineRetryError, 200) + self._set_from_dict(r.json()) + + +class ProjectPipelineManager(BaseManager): + obj_cls = ProjectPipeline + + class ProjectSnippetNote(GitlabObject): _url = '/projects/%(project_id)s/snippets/%(snippet_id)s/notes' _constructorTypes = {'author': 'User'} @@ -1804,6 +1841,7 @@ class Project(GitlabObject): ('mergerequests', ProjectMergeRequestManager, [('project_id', 'id')]), ('milestones', ProjectMilestoneManager, [('project_id', 'id')]), ('notes', ProjectNoteManager, [('project_id', 'id')]), + ('pipelines', ProjectPipelineManager, [('project_id', 'id')]), ('services', ProjectServiceManager, [('project_id', 'id')]), ('snippets', ProjectSnippetManager, [('project_id', 'id')]), ('tags', ProjectTagManager, [('project_id', 'id')]), |