summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaimund Hook <raimund.hook@exfo.com>2021-11-25 11:45:28 +0000
committerRaimund Hook <raimund.hook@exfo.com>2021-11-25 11:45:28 +0000
commit7f4edb53e9413f401c859701d8c3bac4a40706af (patch)
treebd7ef2a3fba0ed1a123c743296554af1ef3833be
parent3225f2cfee740374ef36e5cd6796d2370d0e2344 (diff)
downloadgitlab-7f4edb53e9413f401c859701d8c3bac4a40706af.tar.gz
feat(api): add support for epic notes
Added support for notes on group epics Signed-off-by: Raimund Hook <raimund.hook@exfo.com>
-rw-r--r--docs/gl_objects/notes.rst11
-rw-r--r--gitlab/v4/objects/award_emojis.py40
-rw-r--r--gitlab/v4/objects/notes.py47
3 files changed, 96 insertions, 2 deletions
diff --git a/docs/gl_objects/notes.rst b/docs/gl_objects/notes.rst
index 053c0a0..26d0e5e 100644
--- a/docs/gl_objects/notes.rst
+++ b/docs/gl_objects/notes.rst
@@ -4,7 +4,7 @@
Notes
#####
-You can manipulate notes (comments) on project issues, merge requests and
+You can manipulate notes (comments) on group epics, project issues, merge requests and
snippets.
Reference
@@ -12,6 +12,12 @@ Reference
* v4 API:
+ Epics:
+
+ * :class:`gitlab.v4.objects.GroupEpicNote`
+ * :class:`gitlab.v4.objects.GroupEpicNoteManager`
+ * :attr:`gitlab.v4.objects.GroupEpic.notes`
+
Issues:
+ :class:`gitlab.v4.objects.ProjectIssueNote`
@@ -37,18 +43,21 @@ Examples
List the notes for a resource::
+ e_notes = epic.notes.list()
i_notes = issue.notes.list()
mr_notes = mr.notes.list()
s_notes = snippet.notes.list()
Get a note for a resource::
+ e_note = epic.notes.get(note_id)
i_note = issue.notes.get(note_id)
mr_note = mr.notes.get(note_id)
s_note = snippet.notes.get(note_id)
Create a note for a resource::
+ e_note = epic.notes.create({'body': 'note content'})
i_note = issue.notes.create({'body': 'note content'})
mr_note = mr.notes.create({'body': 'note content'})
s_note = snippet.notes.create({'body': 'note content'})
diff --git a/gitlab/v4/objects/award_emojis.py b/gitlab/v4/objects/award_emojis.py
index e4ad370..3f9d777 100644
--- a/gitlab/v4/objects/award_emojis.py
+++ b/gitlab/v4/objects/award_emojis.py
@@ -4,6 +4,10 @@ from gitlab.base import RequiredOptional, RESTManager, RESTObject
from gitlab.mixins import NoUpdateMixin, ObjectDeleteMixin
__all__ = [
+ "GroupEpicAwardEmoji",
+ "GroupEpicAwardEmojiManager",
+ "GroupEpicNoteAwardEmoji",
+ "GroupEpicNoteAwardEmojiManager",
"ProjectIssueAwardEmoji",
"ProjectIssueAwardEmojiManager",
"ProjectIssueNoteAwardEmoji",
@@ -19,6 +23,42 @@ __all__ = [
]
+class GroupEpicAwardEmoji(ObjectDeleteMixin, RESTObject):
+ pass
+
+
+class GroupEpicAwardEmojiManager(NoUpdateMixin, RESTManager):
+ _path = "/groups/{group_id}/epics/{epic_iid}/award_emoji"
+ _obj_cls = GroupEpicAwardEmoji
+ _from_parent_attrs = {"group_id": "group_id", "epic_iid": "iid"}
+ _create_attrs = RequiredOptional(required=("name",))
+
+ def get(
+ self, id: Union[str, int], lazy: bool = False, **kwargs: Any
+ ) -> GroupEpicAwardEmoji:
+ return cast(GroupEpicAwardEmoji, super().get(id=id, lazy=lazy, **kwargs))
+
+
+class GroupEpicNoteAwardEmoji(ObjectDeleteMixin, RESTObject):
+ pass
+
+
+class GroupEpicNoteAwardEmojiManager(NoUpdateMixin, RESTManager):
+ _path = "/groups/{group_id}/epics/{epic_iid}/notes/{note_id}/award_emoji"
+ _obj_cls = GroupEpicNoteAwardEmoji
+ _from_parent_attrs = {
+ "group_id": "group_id",
+ "epic_iid": "epic_iid",
+ "note_id": "id",
+ }
+ _create_attrs = RequiredOptional(required=("name",))
+
+ def get(
+ self, id: Union[str, int], lazy: bool = False, **kwargs: Any
+ ) -> GroupEpicNoteAwardEmoji:
+ return cast(GroupEpicNoteAwardEmoji, super().get(id=id, lazy=lazy, **kwargs))
+
+
class ProjectIssueAwardEmoji(ObjectDeleteMixin, RESTObject):
pass
diff --git a/gitlab/v4/objects/notes.py b/gitlab/v4/objects/notes.py
index c4055ad..833f632 100644
--- a/gitlab/v4/objects/notes.py
+++ b/gitlab/v4/objects/notes.py
@@ -13,12 +13,17 @@ from gitlab.mixins import (
)
from .award_emojis import ( # noqa: F401
+ GroupEpicNoteAwardEmojiManager,
ProjectIssueNoteAwardEmojiManager,
ProjectMergeRequestNoteAwardEmojiManager,
ProjectSnippetNoteAwardEmojiManager,
)
__all__ = [
+ "GroupEpicNote",
+ "GroupEpicNoteManager",
+ "GroupEpicDiscussionNote",
+ "GroupEpicDiscussionNoteManager",
"ProjectNote",
"ProjectNoteManager",
"ProjectCommitDiscussionNote",
@@ -38,6 +43,46 @@ __all__ = [
]
+class GroupEpicNote(SaveMixin, ObjectDeleteMixin, RESTObject):
+ awardemojis: GroupEpicNoteAwardEmojiManager
+
+
+class GroupEpicNoteManager(CRUDMixin, RESTManager):
+ _path = "/groups/{group_id}/epics/{epic_iid}/notes"
+ _obj_cls = GroupEpicNote
+ _from_parent_attrs = {"group_id": "group_id", "epic_iid": "iid"}
+ _create_attrs = RequiredOptional(required=("body",), optional=("created_at",))
+ _update_attrs = RequiredOptional(required=("body",))
+
+ def get(
+ self, id: Union[str, int], lazy: bool = False, **kwargs: Any
+ ) -> GroupEpicNote:
+ return cast(GroupEpicNote, super().get(id=id, lazy=lazy, **kwargs))
+
+
+class GroupEpicDiscussionNote(SaveMixin, ObjectDeleteMixin, RESTObject):
+ pass
+
+
+class GroupEpicDiscussionNoteManager(
+ GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTManager
+):
+ _path = "/groups/{group_id}/epics/{epic_iid}/discussions/{discussion_id}/notes"
+ _obj_cls = GroupEpicDiscussionNote
+ _from_parent_attrs = {
+ "group_id": "group_id",
+ "epic_iid": "epic_iid",
+ "discussion_id": "id",
+ }
+ _create_attrs = RequiredOptional(required=("body",), optional=("created_at",))
+ _update_attrs = RequiredOptional(required=("body",))
+
+ def get(
+ self, id: Union[str, int], lazy: bool = False, **kwargs: Any
+ ) -> GroupEpicDiscussionNote:
+ return cast(GroupEpicDiscussionNote, super().get(id=id, lazy=lazy, **kwargs))
+
+
class ProjectNote(RESTObject):
pass
@@ -172,7 +217,7 @@ class ProjectMergeRequestDiscussionNoteManager(
class ProjectSnippetNote(SaveMixin, ObjectDeleteMixin, RESTObject):
- awardemojis: ProjectMergeRequestNoteAwardEmojiManager
+ awardemojis: ProjectSnippetNoteAwardEmojiManager
class ProjectSnippetNoteManager(CRUDMixin, RESTManager):