1from gitlab.base import RESTManager, RESTObject
2from gitlab.mixins import ListMixin, RetrieveMixin
3
4__all__ = [
5    "Event",
6    "EventManager",
7    "GroupEpicResourceLabelEvent",
8    "GroupEpicResourceLabelEventManager",
9    "ProjectEvent",
10    "ProjectEventManager",
11    "ProjectIssueResourceLabelEvent",
12    "ProjectIssueResourceLabelEventManager",
13    "ProjectIssueResourceMilestoneEvent",
14    "ProjectIssueResourceMilestoneEventManager",
15    "ProjectIssueResourceStateEvent",
16    "ProjectIssueResourceStateEventManager",
17    "ProjectMergeRequestResourceLabelEvent",
18    "ProjectMergeRequestResourceLabelEventManager",
19    "ProjectMergeRequestResourceMilestoneEvent",
20    "ProjectMergeRequestResourceMilestoneEventManager",
21    "ProjectMergeRequestResourceStateEvent",
22    "ProjectMergeRequestResourceStateEventManager",
23    "UserEvent",
24    "UserEventManager",
25]
26
27
28class Event(RESTObject):
29    _id_attr = None
30    _short_print_attr = "target_title"
31
32
33class EventManager(ListMixin, RESTManager):
34    _path = "/events"
35    _obj_cls = Event
36    _list_filters = ("action", "target_type", "before", "after", "sort")
37
38
39class GroupEpicResourceLabelEvent(RESTObject):
40    pass
41
42
43class GroupEpicResourceLabelEventManager(RetrieveMixin, RESTManager):
44    _path = "/groups/%(group_id)s/epics/%(epic_id)s/resource_label_events"
45    _obj_cls = GroupEpicResourceLabelEvent
46    _from_parent_attrs = {"group_id": "group_id", "epic_id": "id"}
47
48
49class ProjectEvent(Event):
50    pass
51
52
53class ProjectEventManager(EventManager):
54    _path = "/projects/%(project_id)s/events"
55    _obj_cls = ProjectEvent
56    _from_parent_attrs = {"project_id": "id"}
57
58
59class ProjectIssueResourceLabelEvent(RESTObject):
60    pass
61
62
63class ProjectIssueResourceLabelEventManager(RetrieveMixin, RESTManager):
64    _path = "/projects/%(project_id)s/issues/%(issue_iid)s" "/resource_label_events"
65    _obj_cls = ProjectIssueResourceLabelEvent
66    _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
67
68
69class ProjectIssueResourceMilestoneEvent(RESTObject):
70    pass
71
72
73class ProjectIssueResourceMilestoneEventManager(RetrieveMixin, RESTManager):
74    _path = "/projects/%(project_id)s/issues/%(issue_iid)s/resource_milestone_events"
75    _obj_cls = ProjectIssueResourceMilestoneEvent
76    _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
77
78
79class ProjectIssueResourceStateEvent(RESTObject):
80    pass
81
82
83class ProjectIssueResourceStateEventManager(RetrieveMixin, RESTManager):
84    _path = "/projects/%(project_id)s/issues/%(issue_iid)s/resource_state_events"
85    _obj_cls = ProjectIssueResourceStateEvent
86    _from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
87
88
89class ProjectMergeRequestResourceLabelEvent(RESTObject):
90    pass
91
92
93class ProjectMergeRequestResourceLabelEventManager(RetrieveMixin, RESTManager):
94    _path = (
95        "/projects/%(project_id)s/merge_requests/%(mr_iid)s" "/resource_label_events"
96    )
97    _obj_cls = ProjectMergeRequestResourceLabelEvent
98    _from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
99
100
101class ProjectMergeRequestResourceMilestoneEvent(RESTObject):
102    pass
103
104
105class ProjectMergeRequestResourceMilestoneEventManager(RetrieveMixin, RESTManager):
106    _path = (
107        "/projects/%(project_id)s/merge_requests/%(mr_iid)s/resource_milestone_events"
108    )
109    _obj_cls = ProjectMergeRequestResourceMilestoneEvent
110    _from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
111
112
113class ProjectMergeRequestResourceStateEvent(RESTObject):
114    pass
115
116
117class ProjectMergeRequestResourceStateEventManager(RetrieveMixin, RESTManager):
118    _path = "/projects/%(project_id)s/merge_requests/%(mr_iid)s/resource_state_events"
119    _obj_cls = ProjectMergeRequestResourceStateEvent
120    _from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
121
122
123class UserEvent(Event):
124    pass
125
126
127class UserEventManager(EventManager):
128    _path = "/users/%(user_id)s/events"
129    _obj_cls = UserEvent
130    _from_parent_attrs = {"user_id": "id"}
131