Skip to content

Commit 20eb7d8

Browse files
authored
Merge pull request #625 from python-gitlab/fix/611/resource_label_event
Add support to resource label events
2 parents 22536f3 + 95d0d74 commit 20eb7d8

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
@@ -664,7 +664,7 @@ Delete project push rules::
664664
pr.delete()
665665

666666
Project protected tags
667-
==================
667+
======================
668668

669669
Reference
670670
---------

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):
@@ -1827,6 +1840,17 @@ def create(self, data, **kwargs):
18271840
return source_issue, target_issue
18281841

18291842

1843+
class ProjectIssueResourceLabelEvent(RESTObject):
1844+
pass
1845+
1846+
1847+
class ProjectIssueResourceLabelEventManager(RetrieveMixin, RESTManager):
1848+
_path = ('/projects/%(project_id)s/issues/%(issue_iid)s'
1849+
'/resource_label_events')
1850+
_obj_cls = ProjectIssueResourceLabelEvent
1851+
_from_parent_attrs = {'project_id': 'project_id', 'issue_iid': 'iid'}
1852+
1853+
18301854
class ProjectIssue(UserAgentDetailMixin, SubscribableMixin, TodoMixin,
18311855
TimeTrackingMixin, ParticipantsMixin, SaveMixin,
18321856
ObjectDeleteMixin, RESTObject):
@@ -1837,6 +1861,7 @@ class ProjectIssue(UserAgentDetailMixin, SubscribableMixin, TodoMixin,
18371861
('discussions', 'ProjectIssueDiscussionManager'),
18381862
('links', 'ProjectIssueLinkManager'),
18391863
('notes', 'ProjectIssueNoteManager'),
1864+
('resourcelabelevents', 'ProjectIssueResourceLabelEventManager'),
18401865
)
18411866

18421867
@cli.register_custom_action('ProjectIssue', ('to_project_id',))
@@ -2134,6 +2159,17 @@ class ProjectMergeRequestDiscussionManager(RetrieveMixin, CreateMixin,
21342159
_update_attrs = (('resolved',), tuple())
21352160

21362161

2162+
class ProjectMergeRequestResourceLabelEvent(RESTObject):
2163+
pass
2164+
2165+
2166+
class ProjectMergeRequestResourceLabelEventManager(RetrieveMixin, RESTManager):
2167+
_path = ('/projects/%(project_id)s/merge_requests/%(mr_iid)s'
2168+
'/resource_label_events')
2169+
_obj_cls = ProjectMergeRequestResourceLabelEvent
2170+
_from_parent_attrs = {'project_id': 'project_id', 'mr_iid': 'iid'}
2171+
2172+
21372173
class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin,
21382174
ParticipantsMixin, SaveMixin, ObjectDeleteMixin,
21392175
RESTObject):
@@ -2145,6 +2181,8 @@ class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin,
21452181
('diffs', 'ProjectMergeRequestDiffManager'),
21462182
('discussions', 'ProjectMergeRequestDiscussionManager'),
21472183
('notes', 'ProjectMergeRequestNoteManager'),
2184+
('resourcelabelevents',
2185+
'ProjectMergeRequestResourceLabelEventManager'),
21482186
)
21492187

21502188
@cli.register_custom_action('ProjectMergeRequest')

tools/python_test_v4.py

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

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

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

0 commit comments

Comments
 (0)