Skip to content

Commit 95d0d74

Browse files
author
Gauvain Pocentek
committed
Add support to resource label events
Closes #611
1 parent c8eaeb2 commit 95d0d74

File tree

4 files changed

+96
-2
lines changed

4 files changed

+96
-2
lines changed

docs/gl_objects/labels.rst

+39
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
Labels
33
######
44

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

@@ -48,3 +51,39 @@ Manage labels in issues and merge requests::
4851
'labels': ['foo']})
4952
issue.labels.append('bar')
5053
issue.save()
54+
55+
Label events
56+
============
57+
58+
Resource label events keep track about who, when, and which label was added or
59+
removed to an issuable.
60+
61+
Group epic label events are only available in the EE edition.
62+
63+
Reference
64+
---------
65+
66+
* v4 API:
67+
68+
+ :class:`gitlab.v4.objects.ProjectIssueResourceLabelEvent`
69+
+ :class:`gitlab.v4.objects.ProjectIssueResourceLabelEventManager`
70+
+ :attr:`gitlab.v4.objects.ProjectIssue.resourcelabelevents`
71+
+ :class:`gitlab.v4.objects.ProjectMergeRequestResourceLabelEvent`
72+
+ :class:`gitlab.v4.objects.ProjectMergeRequestResourceLabelEventManager`
73+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.resourcelabelevents`
74+
+ :class:`gitlab.v4.objects.GroupEpicResourceLabelEvent`
75+
+ :class:`gitlab.v4.objects.GroupEpicResourceLabelEventManager`
76+
+ :attr:`gitlab.v4.objects.GroupEpic.resourcelabelevents`
77+
78+
* GitLab API: https://docs.gitlab.com/ee/api/resource_label_events.html
79+
80+
Examples
81+
--------
82+
83+
Get the events for a resource (issue, merge request or epic)::
84+
85+
events = resource.resourcelabelevents.list()
86+
87+
Get a specific event for a resource::
88+
89+
event = resource.resourcelabelevents.get(event_id)

docs/gl_objects/projects.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ Delete project push rules::
659659
pr.delete()
660660

661661
Project protected tags
662-
==================
662+
======================
663663

664664
Reference
665665
---------

gitlab/v4/objects.py

+39-1
Original file line numberDiff line numberDiff line change
@@ -662,9 +662,22 @@ def create(self, data, **kwargs):
662662
return self._obj_cls(self, server_data)
663663

664664

665+
class GroupEpicResourceLabelEvent(RESTObject):
666+
pass
667+
668+
669+
class GroupEpicResourceLabelEventManager(RetrieveMixin, RESTManager):
670+
_path = ('/groups/%(group_id)s/epics/%(epic_id)s/resource_label_events')
671+
_obj_cls = GroupEpicResourceLabelEvent
672+
_from_parent_attrs = {'group_id': 'group_id', 'epic_id': 'id'}
673+
674+
665675
class GroupEpic(ObjectDeleteMixin, SaveMixin, RESTObject):
666676
_id_attr = 'iid'
667-
_managers = (('issues', 'GroupEpicIssueManager'),)
677+
_managers = (
678+
('issues', 'GroupEpicIssueManager'),
679+
('resourcelabelevents', 'GroupEpicResourceLabelEventManager'),
680+
)
668681

669682

670683
class GroupEpicManager(CRUDMixin, RESTManager):
@@ -1803,6 +1816,17 @@ def create(self, data, **kwargs):
18031816
return source_issue, target_issue
18041817

18051818

1819+
class ProjectIssueResourceLabelEvent(RESTObject):
1820+
pass
1821+
1822+
1823+
class ProjectIssueResourceLabelEventManager(RetrieveMixin, RESTManager):
1824+
_path = ('/projects/%(project_id)s/issues/%(issue_iid)s'
1825+
'/resource_label_events')
1826+
_obj_cls = ProjectIssueResourceLabelEvent
1827+
_from_parent_attrs = {'project_id': 'project_id', 'issue_iid': 'iid'}
1828+
1829+
18061830
class ProjectIssue(UserAgentDetailMixin, SubscribableMixin, TodoMixin,
18071831
TimeTrackingMixin, ParticipantsMixin, SaveMixin,
18081832
ObjectDeleteMixin, RESTObject):
@@ -1813,6 +1837,7 @@ class ProjectIssue(UserAgentDetailMixin, SubscribableMixin, TodoMixin,
18131837
('discussions', 'ProjectIssueDiscussionManager'),
18141838
('links', 'ProjectIssueLinkManager'),
18151839
('notes', 'ProjectIssueNoteManager'),
1840+
('resourcelabelevents', 'ProjectIssueResourceLabelEventManager'),
18161841
)
18171842

18181843
@cli.register_custom_action('ProjectIssue', ('to_project_id',))
@@ -2086,6 +2111,17 @@ class ProjectMergeRequestDiscussionManager(RetrieveMixin, CreateMixin,
20862111
_update_attrs = (('resolved',), tuple())
20872112

20882113

2114+
class ProjectMergeRequestResourceLabelEvent(RESTObject):
2115+
pass
2116+
2117+
2118+
class ProjectMergeRequestResourceLabelEventManager(RetrieveMixin, RESTManager):
2119+
_path = ('/projects/%(project_id)s/merge_requests/%(mr_iid)s'
2120+
'/resource_label_events')
2121+
_obj_cls = ProjectMergeRequestResourceLabelEvent
2122+
_from_parent_attrs = {'project_id': 'project_id', 'mr_iid': 'iid'}
2123+
2124+
20892125
class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin,
20902126
ParticipantsMixin, SaveMixin, ObjectDeleteMixin,
20912127
RESTObject):
@@ -2097,6 +2133,8 @@ class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin,
20972133
('diffs', 'ProjectMergeRequestDiffManager'),
20982134
('discussions', 'ProjectMergeRequestDiscussionManager'),
20992135
('notes', 'ProjectMergeRequestNoteManager'),
2136+
('resourcelabelevents',
2137+
'ProjectMergeRequestResourceLabelEventManager'),
21002138
)
21012139

21022140
@cli.register_custom_action('ProjectMergeRequest')

tools/python_test_v4.py

+17
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,15 @@
539539
assert(issue1.user_agent_detail()['user_agent'])
540540
assert(issue1.participants())
541541

542+
# issues labels and events
543+
label2 = admin_project.labels.create({'name': 'label2', 'color': '#aabbcc'})
544+
issue1.labels = ['label2']
545+
issue1.save()
546+
events = issue1.resourcelabelevents.list()
547+
assert(events)
548+
event = issue1.resourcelabelevents.get(events[0].id)
549+
assert(event)
550+
542551
discussion = issue1.discussions.create({'body': 'Discussion body'})
543552
assert(len(issue1.discussions.list()) == 1)
544553
d_note = discussion.notes.create({'body': 'first note'})
@@ -628,6 +637,14 @@
628637
discussion = mr.discussions.get(discussion.id)
629638
assert(len(discussion.attributes['notes']) == 1)
630639

640+
# mr labels and events
641+
mr.labels = ['label2']
642+
mr.save()
643+
events = mr.resourcelabelevents.list()
644+
assert(events)
645+
event = mr.resourcelabelevents.get(events[0].id)
646+
assert(event)
647+
631648
# basic testing: only make sure that the methods exist
632649
mr.commits()
633650
mr.changes()

0 commit comments

Comments
 (0)