diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2021-11-01 19:58:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-01 19:58:08 +0100 |
commit | ed88bcea09c337fe9ede822ea88e7770a9c6ade0 (patch) | |
tree | 7595e860b397c88df86d2759f7a2fd6d51be9a9a | |
parent | c7fdad42f68927d79e0d1963ade3324370b9d0e2 (diff) | |
parent | fd73a738b429be0a2642d5b777d5e56a4c928787 (diff) | |
download | gitlab-ed88bcea09c337fe9ede822ea88e7770a9c6ade0.tar.gz |
Merge pull request #1646 from JacobHenner/add-merge-trains
feat(api): add merge trains
-rw-r--r-- | docs/api-objects.rst | 1 | ||||
-rw-r--r-- | docs/gl_objects/merge_trains.rst | 29 | ||||
-rw-r--r-- | gitlab/v4/objects/__init__.py | 1 | ||||
-rw-r--r-- | gitlab/v4/objects/merge_trains.py | 18 | ||||
-rw-r--r-- | gitlab/v4/objects/projects.py | 2 | ||||
-rw-r--r-- | tests/unit/objects/test_merge_trains.py | 65 |
6 files changed, 116 insertions, 0 deletions
diff --git a/docs/api-objects.rst b/docs/api-objects.rst index 567344f..9c089fe 100644 --- a/docs/api-objects.rst +++ b/docs/api-objects.rst @@ -29,6 +29,7 @@ API examples gl_objects/boards gl_objects/labels gl_objects/notifications + gl_objects/merge_trains gl_objects/mrs gl_objects/mr_approvals gl_objects/milestones diff --git a/docs/gl_objects/merge_trains.rst b/docs/gl_objects/merge_trains.rst new file mode 100644 index 0000000..c0920df --- /dev/null +++ b/docs/gl_objects/merge_trains.rst @@ -0,0 +1,29 @@ +############ +Merge Trains +############ + +Reference +--------- + +* v4 API: + + + :class:`gitlab.v4.objects.ProjectMergeTrain` + + :class:`gitlab.v4.objects.ProjectMergeTrainManager` + + :attr:`gitlab.v4.objects.Project.merge_trains` + +* GitLab API: https://docs.gitlab.com/ee/api/merge_trains.html + +Examples +-------- + +List merge trains for a project:: + + merge_trains = project.merge_trains.list() + +List active merge trains for a project:: + + merge_trains = project.merge_trains.list(scope="active") + +List completed (have been merged) merge trains for a project:: + + merge_trains = project.merge_trains.list(scope="complete")
\ No newline at end of file diff --git a/gitlab/v4/objects/__init__.py b/gitlab/v4/objects/__init__.py index c2ff4fb..b1d6484 100644 --- a/gitlab/v4/objects/__init__.py +++ b/gitlab/v4/objects/__init__.py @@ -49,6 +49,7 @@ from .ldap import * from .members import * from .merge_request_approvals import * from .merge_requests import * +from .merge_trains import * from .milestones import * from .namespaces import * from .notes import * diff --git a/gitlab/v4/objects/merge_trains.py b/gitlab/v4/objects/merge_trains.py new file mode 100644 index 0000000..4b23892 --- /dev/null +++ b/gitlab/v4/objects/merge_trains.py @@ -0,0 +1,18 @@ +from gitlab.base import RESTManager, RESTObject +from gitlab.mixins import ListMixin + +__all__ = [ + "ProjectMergeTrain", + "ProjectMergeTrainManager", +] + + +class ProjectMergeTrain(RESTObject): + pass + + +class ProjectMergeTrainManager(ListMixin, RESTManager): + _path = "/projects/%(project_id)s/merge_trains" + _obj_cls = ProjectMergeTrain + _from_parent_attrs = {"project_id": "id"} + _list_filters = "scope" diff --git a/gitlab/v4/objects/projects.py b/gitlab/v4/objects/projects.py index 551079a..67863eb 100644 --- a/gitlab/v4/objects/projects.py +++ b/gitlab/v4/objects/projects.py @@ -42,6 +42,7 @@ from .merge_request_approvals import ( # noqa: F401 ProjectApprovalRuleManager, ) from .merge_requests import ProjectMergeRequestManager # noqa: F401 +from .merge_trains import ProjectMergeTrainManager # noqa: F401 from .milestones import ProjectMilestoneManager # noqa: F401 from .notes import ProjectNoteManager # noqa: F401 from .notification_settings import ProjectNotificationSettingsManager # noqa: F401 @@ -141,6 +142,7 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTO members: ProjectMemberManager members_all: ProjectMemberAllManager mergerequests: ProjectMergeRequestManager + merge_trains: ProjectMergeTrainManager milestones: ProjectMilestoneManager notes: ProjectNoteManager notificationsettings: ProjectNotificationSettingsManager diff --git a/tests/unit/objects/test_merge_trains.py b/tests/unit/objects/test_merge_trains.py new file mode 100644 index 0000000..a45718e --- /dev/null +++ b/tests/unit/objects/test_merge_trains.py @@ -0,0 +1,65 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/merge_trains.html +""" +import pytest +import responses + +from gitlab.v4.objects import ProjectMergeTrain + +mr_content = { + "id": 110, + "merge_request": { + "id": 1, + "iid": 1, + "project_id": 3, + "title": "Test merge train", + "description": "", + "state": "merged", + "created_at": "2020-02-06T08:39:14.883Z", + "updated_at": "2020-02-06T08:40:57.038Z", + "web_url": "http://gitlab.example.com/root/merge-train-race-condition/-/merge_requests/1", + }, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root", + }, + "pipeline": { + "id": 246, + "sha": "bcc17a8ffd51be1afe45605e714085df28b80b13", + "ref": "refs/merge-requests/1/train", + "status": "success", + "created_at": "2020-02-06T08:40:42.410Z", + "updated_at": "2020-02-06T08:40:46.912Z", + "web_url": "http://gitlab.example.com/root/merge-train-race-condition/pipelines/246", + }, + "created_at": "2020-02-06T08:39:47.217Z", + "updated_at": "2020-02-06T08:40:57.720Z", + "target_branch": "feature-1580973432", + "status": "merged", + "merged_at": "2020-02-06T08:40:57.719Z", + "duration": 70, +} + + +@pytest.fixture +def resp_list_merge_trains(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_trains", + json=[mr_content], + content_type="application/json", + status=200, + ) + yield rsps + + +def test_list_project_merge_requests(project, resp_list_merge_trains): + merge_trains = project.merge_trains.list() + assert isinstance(merge_trains[0], ProjectMergeTrain) + assert merge_trains[0].id == mr_content["id"] |