summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/gl_objects/labels.rst39
-rw-r--r--docs/gl_objects/projects.rst2
-rw-r--r--gitlab/v4/objects.py40
-rw-r--r--tools/python_test_v4.py17
4 files changed, 96 insertions, 2 deletions
diff --git a/docs/gl_objects/labels.rst b/docs/gl_objects/labels.rst
index 1c98971..a4667aa 100644
--- a/docs/gl_objects/labels.rst
+++ b/docs/gl_objects/labels.rst
@@ -2,6 +2,9 @@
Labels
######
+Project labels
+==============
+
Reference
---------
@@ -48,3 +51,39 @@ Manage labels in issues and merge requests::
'labels': ['foo']})
issue.labels.append('bar')
issue.save()
+
+Label events
+============
+
+Resource label events keep track about who, when, and which label was added or
+removed to an issuable.
+
+Group epic label events are only available in the EE edition.
+
+Reference
+---------
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.ProjectIssueResourceLabelEvent`
+ + :class:`gitlab.v4.objects.ProjectIssueResourceLabelEventManager`
+ + :attr:`gitlab.v4.objects.ProjectIssue.resourcelabelevents`
+ + :class:`gitlab.v4.objects.ProjectMergeRequestResourceLabelEvent`
+ + :class:`gitlab.v4.objects.ProjectMergeRequestResourceLabelEventManager`
+ + :attr:`gitlab.v4.objects.ProjectMergeRequest.resourcelabelevents`
+ + :class:`gitlab.v4.objects.GroupEpicResourceLabelEvent`
+ + :class:`gitlab.v4.objects.GroupEpicResourceLabelEventManager`
+ + :attr:`gitlab.v4.objects.GroupEpic.resourcelabelevents`
+
+* GitLab API: https://docs.gitlab.com/ee/api/resource_label_events.html
+
+Examples
+--------
+
+Get the events for a resource (issue, merge request or epic)::
+
+ events = resource.resourcelabelevents.list()
+
+Get a specific event for a resource::
+
+ event = resource.resourcelabelevents.get(event_id)
diff --git a/docs/gl_objects/projects.rst b/docs/gl_objects/projects.rst
index 5cc223f..c8bd3eb 100644
--- a/docs/gl_objects/projects.rst
+++ b/docs/gl_objects/projects.rst
@@ -659,7 +659,7 @@ Delete project push rules::
pr.delete()
Project protected tags
-==================
+======================
Reference
---------
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 281301e..84b3a86 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -662,9 +662,22 @@ class GroupEpicIssueManager(ListMixin, CreateMixin, UpdateMixin, DeleteMixin,
return self._obj_cls(self, server_data)
+class GroupEpicResourceLabelEvent(RESTObject):
+ pass
+
+
+class GroupEpicResourceLabelEventManager(RetrieveMixin, RESTManager):
+ _path = ('/groups/%(group_id)s/epics/%(epic_id)s/resource_label_events')
+ _obj_cls = GroupEpicResourceLabelEvent
+ _from_parent_attrs = {'group_id': 'group_id', 'epic_id': 'id'}
+
+
class GroupEpic(ObjectDeleteMixin, SaveMixin, RESTObject):
_id_attr = 'iid'
- _managers = (('issues', 'GroupEpicIssueManager'),)
+ _managers = (
+ ('issues', 'GroupEpicIssueManager'),
+ ('resourcelabelevents', 'GroupEpicResourceLabelEventManager'),
+ )
class GroupEpicManager(CRUDMixin, RESTManager):
@@ -1803,6 +1816,17 @@ class ProjectIssueLinkManager(ListMixin, CreateMixin, DeleteMixin,
return source_issue, target_issue
+class ProjectIssueResourceLabelEvent(RESTObject):
+ pass
+
+
+class ProjectIssueResourceLabelEventManager(RetrieveMixin, RESTManager):
+ _path = ('/projects/%(project_id)s/issues/%(issue_iid)s'
+ '/resource_label_events')
+ _obj_cls = ProjectIssueResourceLabelEvent
+ _from_parent_attrs = {'project_id': 'project_id', 'issue_iid': 'iid'}
+
+
class ProjectIssue(UserAgentDetailMixin, SubscribableMixin, TodoMixin,
TimeTrackingMixin, ParticipantsMixin, SaveMixin,
ObjectDeleteMixin, RESTObject):
@@ -1813,6 +1837,7 @@ class ProjectIssue(UserAgentDetailMixin, SubscribableMixin, TodoMixin,
('discussions', 'ProjectIssueDiscussionManager'),
('links', 'ProjectIssueLinkManager'),
('notes', 'ProjectIssueNoteManager'),
+ ('resourcelabelevents', 'ProjectIssueResourceLabelEventManager'),
)
@cli.register_custom_action('ProjectIssue', ('to_project_id',))
@@ -2086,6 +2111,17 @@ class ProjectMergeRequestDiscussionManager(RetrieveMixin, CreateMixin,
_update_attrs = (('resolved',), tuple())
+class ProjectMergeRequestResourceLabelEvent(RESTObject):
+ pass
+
+
+class ProjectMergeRequestResourceLabelEventManager(RetrieveMixin, RESTManager):
+ _path = ('/projects/%(project_id)s/merge_requests/%(mr_iid)s'
+ '/resource_label_events')
+ _obj_cls = ProjectMergeRequestResourceLabelEvent
+ _from_parent_attrs = {'project_id': 'project_id', 'mr_iid': 'iid'}
+
+
class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin,
ParticipantsMixin, SaveMixin, ObjectDeleteMixin,
RESTObject):
@@ -2097,6 +2133,8 @@ class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin,
('diffs', 'ProjectMergeRequestDiffManager'),
('discussions', 'ProjectMergeRequestDiscussionManager'),
('notes', 'ProjectMergeRequestNoteManager'),
+ ('resourcelabelevents',
+ 'ProjectMergeRequestResourceLabelEventManager'),
)
@cli.register_custom_action('ProjectMergeRequest')
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index 133aeb3..1a111b3 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -539,6 +539,15 @@ assert(isinstance(issue1.user_agent_detail(), dict))
assert(issue1.user_agent_detail()['user_agent'])
assert(issue1.participants())
+# issues labels and events
+label2 = admin_project.labels.create({'name': 'label2', 'color': '#aabbcc'})
+issue1.labels = ['label2']
+issue1.save()
+events = issue1.resourcelabelevents.list()
+assert(events)
+event = issue1.resourcelabelevents.get(events[0].id)
+assert(event)
+
discussion = issue1.discussions.create({'body': 'Discussion body'})
assert(len(issue1.discussions.list()) == 1)
d_note = discussion.notes.create({'body': 'first note'})
@@ -628,6 +637,14 @@ d_note_from_get.delete()
discussion = mr.discussions.get(discussion.id)
assert(len(discussion.attributes['notes']) == 1)
+# mr labels and events
+mr.labels = ['label2']
+mr.save()
+events = mr.resourcelabelevents.list()
+assert(events)
+event = mr.resourcelabelevents.get(events[0].id)
+assert(event)
+
# basic testing: only make sure that the methods exist
mr.commits()
mr.changes()