From 4d00c12723d565dc0a83670f62e3f5102650d822 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 18:04:03 +0100 Subject: [PATCH 1/4] docs(api): add examples for resource state events --- docs/gl_objects/events.rst | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/docs/gl_objects/events.rst b/docs/gl_objects/events.rst index 8071b00fb..5dc03c713 100644 --- a/docs/gl_objects/events.rst +++ b/docs/gl_objects/events.rst @@ -2,6 +2,9 @@ Events ###### +Events +====== + Reference --------- @@ -39,3 +42,42 @@ List the issue events on a project:: List the user events:: events = project.events.list() + +Resource state events +===================== + +Reference +--------- + +* v4 API: + + + :class:`gitlab.v4.objects.ProjectIssueResourceStateEvent` + + :class:`gitlab.v4.objects.ProjectIssueResourceStateEventManager` + + :attr:`gitlab.v4.objects.ProjectIssue.resourcestateevents` + + :class:`gitlab.v4.objects.ProjectMergeRequestResourceStateEvent` + + :class:`gitlab.v4.objects.ProjectMergeRequestResourceStateEventManager` + + :attr:`gitlab.v4.objects.ProjectMergeRequest.resourcestateevents` + +* GitLab API: https://docs.gitlab.com/ee/api/resource_state_events.html + +Examples +-------- + +You can list and get specific resource state events (via their id) for project issues +and project merge requests. + +List the state events of a project issue (paginated):: + + state_events = issue.resourcestateevents.list() + +Get a specific state event of a project issue by its id:: + + state_event = issue.resourcestateevents.get(1) + +List the state events of a project merge request (paginated):: + + state_events = mr.resourcestateevents.list() + +Get a specific state event of a project merge request by its id:: + + state_event = mr.resourcestateevents.get(1) From 10225cf26095efe82713136ddde3330e7afc6d10 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 18:05:23 +0100 Subject: [PATCH 2/4] test(objects): add tests for resource state events --- gitlab/tests/conftest.py | 10 ++ .../objects/test_resource_state_events.py | 105 ++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 gitlab/tests/objects/test_resource_state_events.py diff --git a/gitlab/tests/conftest.py b/gitlab/tests/conftest.py index fc8312f34..74fb858fa 100644 --- a/gitlab/tests/conftest.py +++ b/gitlab/tests/conftest.py @@ -52,6 +52,16 @@ def project(gl): return gl.projects.get(1, lazy=True) +@pytest.fixture +def project_issue(project): + return project.issues.get(1, lazy=True) + + +@pytest.fixture +def project_merge_request(project): + return project.mergerequests.get(1, lazy=True) + + @pytest.fixture def release(project, tag_name): return project.releases.get(tag_name, lazy=True) diff --git a/gitlab/tests/objects/test_resource_state_events.py b/gitlab/tests/objects/test_resource_state_events.py new file mode 100644 index 000000000..01c18870f --- /dev/null +++ b/gitlab/tests/objects/test_resource_state_events.py @@ -0,0 +1,105 @@ +""" +GitLab API: https://docs.gitlab.com/ee/api/resource_state_events.html +""" + +import pytest +import responses + +from gitlab.v4.objects import ( + ProjectIssueResourceStateEvent, + ProjectMergeRequestResourceStateEvent, +) + + +issue_event_content = {"id": 1, "resource_type": "Issue"} +mr_event_content = {"id": 1, "resource_type": "MergeRequest"} + + +@pytest.fixture() +def resp_list_project_issue_state_events(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/issues/1/resource_state_events", + json=[issue_event_content], + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_get_project_issue_state_event(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/issues/1/resource_state_events/1", + json=issue_event_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_list_merge_request_state_events(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_requests/1/resource_state_events", + json=[mr_event_content], + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_get_merge_request_state_event(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_requests/1/resource_state_events/1", + json=mr_event_content, + content_type="application/json", + status=200, + ) + yield rsps + + +def test_list_project_issue_state_events( + project_issue, resp_list_project_issue_state_events +): + state_events = project_issue.resourcestateevents.list() + assert isinstance(state_events, list) + + state_event = state_events[0] + assert isinstance(state_event, ProjectIssueResourceStateEvent) + assert state_event.resource_type == "Issue" + + +def test_get_project_issue_state_event( + project_issue, resp_get_project_issue_state_event +): + state_event = project_issue.resourcestateevents.get(1) + assert isinstance(state_event, ProjectIssueResourceStateEvent) + assert state_event.resource_type == "Issue" + + +def test_list_merge_request_state_events( + project_merge_request, resp_list_merge_request_state_events +): + state_events = project_merge_request.resourcestateevents.list() + assert isinstance(state_events, list) + + state_event = state_events[0] + assert isinstance(state_event, ProjectMergeRequestResourceStateEvent) + assert state_event.resource_type == "MergeRequest" + + +def test_get_merge_request_state_event( + project_merge_request, resp_get_merge_request_state_event +): + state_event = project_merge_request.resourcestateevents.get(1) + assert isinstance(state_event, ProjectMergeRequestResourceStateEvent) + assert state_event.resource_type == "MergeRequest" From d4799c40bd12ed85d4bb834464fdb36c4dadcab6 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 18:06:17 +0100 Subject: [PATCH 3/4] feat(objects): add support for resource state events API --- gitlab/v4/objects/events.py | 26 ++++++++++++++++++++++++++ gitlab/v4/objects/issues.py | 2 ++ gitlab/v4/objects/merge_requests.py | 2 ++ 3 files changed, 30 insertions(+) diff --git a/gitlab/v4/objects/events.py b/gitlab/v4/objects/events.py index d1c3cb4a9..af2f0aa74 100644 --- a/gitlab/v4/objects/events.py +++ b/gitlab/v4/objects/events.py @@ -14,10 +14,14 @@ "ProjectIssueResourceLabelEventManager", "ProjectIssueResourceMilestoneEvent", "ProjectIssueResourceMilestoneEventManager", + "ProjectIssueResourceStateEvent", + "ProjectIssueResourceStateEventManager", "ProjectMergeRequestResourceLabelEvent", "ProjectMergeRequestResourceLabelEventManager", "ProjectMergeRequestResourceMilestoneEvent", "ProjectMergeRequestResourceMilestoneEventManager", + "ProjectMergeRequestResourceStateEvent", + "ProjectMergeRequestResourceStateEventManager", "UserEvent", "UserEventManager", ] @@ -74,6 +78,16 @@ class ProjectIssueResourceMilestoneEventManager(RetrieveMixin, RESTManager): _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"} +class ProjectIssueResourceStateEvent(RESTObject): + pass + + +class ProjectIssueResourceStateEventManager(RetrieveMixin, RESTManager): + _path = "/projects/%(project_id)s/issues/%(issue_iid)s/resource_state_events" + _obj_cls = ProjectIssueResourceStateEvent + _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"} + + class ProjectMergeRequestResourceLabelEvent(RESTObject): pass @@ -98,6 +112,18 @@ class ProjectMergeRequestResourceMilestoneEventManager(RetrieveMixin, RESTManage _from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"} +class ProjectMergeRequestResourceStateEvent(RESTObject): + pass + + +class ProjectMergeRequestResourceStateEventManager(RetrieveMixin, RESTManager): + _path = ( + "/projects/%(project_id)s/merge_requests/%(issue_iid)s/resource_state_events" + ) + _obj_cls = ProjectMergeRequestResourceStateEvent + _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"} + + class UserEvent(Event): pass diff --git a/gitlab/v4/objects/issues.py b/gitlab/v4/objects/issues.py index 4da7f910c..9d38d721d 100644 --- a/gitlab/v4/objects/issues.py +++ b/gitlab/v4/objects/issues.py @@ -20,6 +20,7 @@ from .events import ( ProjectIssueResourceLabelEventManager, ProjectIssueResourceMilestoneEventManager, + ProjectIssueResourceStateEventManager, ) from .notes import ProjectIssueNoteManager @@ -110,6 +111,7 @@ class ProjectIssue( ("notes", "ProjectIssueNoteManager"), ("resourcelabelevents", "ProjectIssueResourceLabelEventManager"), ("resourcemilestoneevents", "ProjectIssueResourceMilestoneEventManager"), + ("resourcestateevents", "ProjectIssueResourceStateEventManager"), ) @cli.register_custom_action("ProjectIssue", ("to_project_id",)) diff --git a/gitlab/v4/objects/merge_requests.py b/gitlab/v4/objects/merge_requests.py index f9b305a1a..938cb5a09 100644 --- a/gitlab/v4/objects/merge_requests.py +++ b/gitlab/v4/objects/merge_requests.py @@ -24,6 +24,7 @@ from .events import ( ProjectMergeRequestResourceLabelEventManager, ProjectMergeRequestResourceMilestoneEventManager, + ProjectMergeRequestResourceStateEventManager, ) @@ -121,6 +122,7 @@ class ProjectMergeRequest( ("notes", "ProjectMergeRequestNoteManager"), ("resourcelabelevents", "ProjectMergeRequestResourceLabelEventManager"), ("resourcemilestoneevents", "ProjectMergeRequestResourceMilestoneEventManager"), + ("resourcestateevents", "ProjectMergeRequestResourceStateEventManager"), ) @cli.register_custom_action("ProjectMergeRequest") From c5e6fb3bc74c509f35f973e291a7551b2b64dba5 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Mon, 8 Mar 2021 08:40:43 +0100 Subject: [PATCH 4/4] chore: fix typo in mr events --- gitlab/v4/objects/events.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gitlab/v4/objects/events.py b/gitlab/v4/objects/events.py index af2f0aa74..bb76b81fa 100644 --- a/gitlab/v4/objects/events.py +++ b/gitlab/v4/objects/events.py @@ -117,11 +117,9 @@ class ProjectMergeRequestResourceStateEvent(RESTObject): class ProjectMergeRequestResourceStateEventManager(RetrieveMixin, RESTManager): - _path = ( - "/projects/%(project_id)s/merge_requests/%(issue_iid)s/resource_state_events" - ) + _path = "/projects/%(project_id)s/merge_requests/%(mr_iid)s/resource_state_events" _obj_cls = ProjectMergeRequestResourceStateEvent - _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"} + _from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"} class UserEvent(Event): pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy