Skip to content

Commit 88f8cc7

Browse files
Oleksii ShkurupiiOleksii Shkurupii
authored andcommitted
feat: add support to resource milestone events
Fixes #1154
1 parent e2dc9ec commit 88f8cc7

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

docs/gl_objects/milestones.rst

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
Milestones
33
##########
44

5+
Project milestones
6+
==================
7+
58
Reference
69
---------
710

@@ -70,3 +73,33 @@ List the issues related to a milestone::
7073
List the merge requests related to a milestone::
7174

7275
merge_requests = milestone.merge_requests()
76+
77+
Milestone events
78+
============
79+
80+
Resource milestone events keep track of what happens to GitLab issues and merge requests.
81+
82+
Reference
83+
---------
84+
85+
* v4 API:
86+
87+
+ :class:`gitlab.v4.objects.ProjectIssueResourceMilestoneEvent`
88+
+ :class:`gitlab.v4.objects.ProjectIssueResourceMilestoneEventManager`
89+
+ :attr:`gitlab.v4.objects.ProjectIssue.resourcemilestoneevents`
90+
+ :class:`gitlab.v4.objects.ProjectMergeRequestResourceMilestoneEvent`
91+
+ :class:`gitlab.v4.objects.ProjectMergeRequestResourceMilestoneEventManager`
92+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.resourcemilestoneevents`
93+
94+
* GitLab API: https://docs.gitlab.com/ee/api/resource_milestone_events.html
95+
96+
Examples
97+
--------
98+
99+
Get milestones for a resource (issue, merge request)::
100+
101+
milestones = resource.resourcemilestoneevents.list()
102+
103+
Get a specific milestone for a resource::
104+
105+
milestone = resource.resourcemilestoneevents.get(milestone_id)

gitlab/v4/objects.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2654,6 +2654,16 @@ class ProjectIssueResourceLabelEventManager(RetrieveMixin, RESTManager):
26542654
_from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
26552655

26562656

2657+
class ProjectIssueResourceMilestoneEvent(RESTObject):
2658+
pass
2659+
2660+
2661+
class ProjectIssueResourceMilestoneEventManager(RetrieveMixin, RESTManager):
2662+
_path = "/projects/%(project_id)s/issues/%(issue_iid)s/resource_milestone_events"
2663+
_obj_cls = ProjectIssueResourceMilestoneEvent
2664+
_from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
2665+
2666+
26572667
class ProjectIssue(
26582668
UserAgentDetailMixin,
26592669
SubscribableMixin,
@@ -2672,6 +2682,7 @@ class ProjectIssue(
26722682
("links", "ProjectIssueLinkManager"),
26732683
("notes", "ProjectIssueNoteManager"),
26742684
("resourcelabelevents", "ProjectIssueResourceLabelEventManager"),
2685+
("resourcemilestoneevents", "ProjectIssueResourceMilestoneEventManager"),
26752686
)
26762687

26772688
@cli.register_custom_action("ProjectIssue", ("to_project_id",))
@@ -3065,6 +3076,18 @@ class ProjectMergeRequestResourceLabelEventManager(RetrieveMixin, RESTManager):
30653076
_from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
30663077

30673078

3079+
class ProjectMergeRequestResourceMilestoneEvent(RESTObject):
3080+
pass
3081+
3082+
3083+
class ProjectMergeRequestResourceMilestoneEventManager(RetrieveMixin, RESTManager):
3084+
_path = (
3085+
"/projects/%(project_id)s/merge_requests/%(mr_iid)s/resource_milestone_events"
3086+
)
3087+
_obj_cls = ProjectMergeRequestResourceMilestoneEvent
3088+
_from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
3089+
3090+
30683091
class ProjectMergeRequest(
30693092
SubscribableMixin,
30703093
TodoMixin,
@@ -3083,6 +3106,7 @@ class ProjectMergeRequest(
30833106
("discussions", "ProjectMergeRequestDiscussionManager"),
30843107
("notes", "ProjectMergeRequestNoteManager"),
30853108
("resourcelabelevents", "ProjectMergeRequestResourceLabelEventManager"),
3109+
("resourcemilestoneevents", "ProjectMergeRequestResourceMilestoneEventManager"),
30863110
)
30873111

30883112
@cli.register_custom_action("ProjectMergeRequest")

tools/python_test_v4.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,11 @@
782782
event = issue1.resourcelabelevents.get(events[0].id)
783783
assert event
784784

785+
# issue milestones
786+
milestones = issue1.resourcemilestoneevents.list()
787+
assert milestones
788+
milestone = issue1.resourcemilestoneevents.get(milestones[0].id)
789+
assert milestone
785790

786791
size = len(issue1.discussions.list())
787792
discussion = issue1.discussions.create({"body": "Discussion body"})
@@ -891,6 +896,14 @@
891896
event = mr.resourcelabelevents.get(events[0].id)
892897
assert event
893898

899+
# mr milestone events
900+
mr.milestone_id = m1.id
901+
mr.save()
902+
milestones = mr.resourcemilestoneevents.list()
903+
assert milestones
904+
milestone = mr.resourcemilestoneevents.get(milestones[0].id)
905+
assert milestone
906+
894907
# rebasing
895908
assert mr.rebase()
896909

0 commit comments

Comments
 (0)