From 48ba88ffb983207da398ea2170c867f87a8898e9 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 12:23:39 +0100 Subject: [PATCH 1/5] refactor(objects): move instance audit events where they belong --- gitlab/v4/objects/audit_events.py | 14 +++++++++++++- gitlab/v4/objects/events.py | 12 ------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gitlab/v4/objects/audit_events.py b/gitlab/v4/objects/audit_events.py index d9d411948..5d1309c79 100644 --- a/gitlab/v4/objects/audit_events.py +++ b/gitlab/v4/objects/audit_events.py @@ -1,17 +1,29 @@ """ GitLab API: -https://docs.gitlab.com/ee/api/audit_events.html#project-audit-events +https://docs.gitlab.com/ee/api/audit_events.html """ from gitlab.base import RESTManager, RESTObject from gitlab.mixins import RetrieveMixin __all__ = [ + "AuditEvent", + "AuditEventManager", "ProjectAudit", "ProjectAuditManager", ] +class AuditEvent(RESTObject): + _id_attr = "id" + + +class AuditEventManager(ListMixin, RESTManager): + _path = "/audit_events" + _obj_cls = AuditEvent + _list_filters = ("created_after", "created_before", "entity_type", "entity_id") + + class ProjectAudit(RESTObject): _id_attr = "id" diff --git a/gitlab/v4/objects/events.py b/gitlab/v4/objects/events.py index 43eba8d64..d1c3cb4a9 100644 --- a/gitlab/v4/objects/events.py +++ b/gitlab/v4/objects/events.py @@ -6,8 +6,6 @@ __all__ = [ "Event", "EventManager", - "AuditEvent", - "AuditEventManager", "GroupEpicResourceLabelEvent", "GroupEpicResourceLabelEventManager", "ProjectEvent", @@ -36,16 +34,6 @@ class EventManager(ListMixin, RESTManager): _list_filters = ("action", "target_type", "before", "after", "sort") -class AuditEvent(RESTObject): - _id_attr = "id" - - -class AuditEventManager(ListMixin, RESTManager): - _path = "/audit_events" - _obj_cls = AuditEvent - _list_filters = ("created_after", "created_before", "entity_type", "entity_id") - - class GroupEpicResourceLabelEvent(RESTObject): pass From c3f0a6f158fbc7d90544274b9bf09d5ac9ac0060 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 12:24:45 +0100 Subject: [PATCH 2/5] fix(objects): add single get endpoint for instance audit events --- gitlab/v4/objects/audit_events.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/v4/objects/audit_events.py b/gitlab/v4/objects/audit_events.py index 5d1309c79..a4437be29 100644 --- a/gitlab/v4/objects/audit_events.py +++ b/gitlab/v4/objects/audit_events.py @@ -18,7 +18,7 @@ class AuditEvent(RESTObject): _id_attr = "id" -class AuditEventManager(ListMixin, RESTManager): +class AuditEventManager(RetrieveMixin, RESTManager): _path = "/audit_events" _obj_cls = AuditEvent _list_filters = ("created_after", "created_before", "entity_type", "entity_id") From 35a190cfa0902d6a298aba0a3135c5a99edfe0fa Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 12:30:44 +0100 Subject: [PATCH 3/5] chore: import audit events in objects --- gitlab/v4/objects/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gitlab/v4/objects/__init__.py b/gitlab/v4/objects/__init__.py index 8a2ed7c37..ac9f861a3 100644 --- a/gitlab/v4/objects/__init__.py +++ b/gitlab/v4/objects/__init__.py @@ -18,6 +18,7 @@ from .access_requests import * from .appearance import * from .applications import * +from .audit_events import * from .award_emojis import * from .badges import * from .boards import * From 84e3247d0cd3ddb1f3aa0ac91fb977c3e1e197b5 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 12:44:59 +0100 Subject: [PATCH 4/5] test(objects): add unit test for instance audit events --- gitlab/tests/objects/test_audit_events.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/gitlab/tests/objects/test_audit_events.py b/gitlab/tests/objects/test_audit_events.py index 75bc11c04..8da77ae66 100644 --- a/gitlab/tests/objects/test_audit_events.py +++ b/gitlab/tests/objects/test_audit_events.py @@ -8,7 +8,7 @@ import pytest import responses -from gitlab.v4.objects.audit_events import ProjectAudit +from gitlab.v4.objects.audit_events import AuditEvent, ProjectAudit id = 5 @@ -32,11 +32,11 @@ } audit_events_url = re.compile( - r"http://localhost/api/v4/((groups|projects)/1/)audit_events" + r"http://localhost/api/v4/((groups|projects)/1/)?audit_events" ) audit_events_url_id = re.compile( - rf"http://localhost/api/v4/((groups|projects)/1/)audit_events/{id}" + rf"http://localhost/api/v4/((groups|projects)/1/)?audit_events/{id}" ) @@ -54,7 +54,7 @@ def resp_list_audit_events(): @pytest.fixture -def resp_get_variable(): +def resp_get_audit_event(): with responses.RequestsMock() as rsps: rsps.add( method=responses.GET, @@ -66,6 +66,19 @@ def resp_get_variable(): yield rsps +def test_list_instance_audit_events(gl, resp_list_audit_events): + audit_events = gl.audit_events.list() + assert isinstance(audit_events, list) + assert isinstance(audit_events[0], AuditEvent) + assert audit_events[0].id == id + + +def test_get_instance_audit_events(gl, resp_get_audit_event): + audit_event = gl.audit_events.get(id) + assert isinstance(audit_event, AuditEvent) + assert audit_event.id == id + + def test_list_project_audit_events(project, resp_list_audit_events): audit_events = project.audit_events.list() assert isinstance(audit_events, list) @@ -73,7 +86,7 @@ def test_list_project_audit_events(project, resp_list_audit_events): assert audit_events[0].id == id -def test_get_project_audit_events(project, resp_get_variable): +def test_get_project_audit_events(project, resp_get_audit_event): audit_event = project.audit_events.get(id) assert isinstance(audit_event, ProjectAudit) assert audit_event.id == id From 2a0fbdf9fe98da6c436230be47b0ddb198c7eca9 Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 7 Mar 2021 12:50:26 +0100 Subject: [PATCH 5/5] feat(objects): add support for group audit events API --- gitlab/tests/objects/test_audit_events.py | 23 ++++++++++-- gitlab/v4/objects/audit_events.py | 46 +++++++++++++++++++++-- gitlab/v4/objects/groups.py | 2 + gitlab/v4/objects/projects.py | 4 +- 4 files changed, 67 insertions(+), 8 deletions(-) diff --git a/gitlab/tests/objects/test_audit_events.py b/gitlab/tests/objects/test_audit_events.py index 8da77ae66..aba778bb7 100644 --- a/gitlab/tests/objects/test_audit_events.py +++ b/gitlab/tests/objects/test_audit_events.py @@ -8,7 +8,11 @@ import pytest import responses -from gitlab.v4.objects.audit_events import AuditEvent, ProjectAudit +from gitlab.v4.objects.audit_events import ( + AuditEvent, + GroupAuditEvent, + ProjectAuditEvent, +) id = 5 @@ -79,14 +83,27 @@ def test_get_instance_audit_events(gl, resp_get_audit_event): assert audit_event.id == id +def test_list_group_audit_events(group, resp_list_audit_events): + audit_events = group.audit_events.list() + assert isinstance(audit_events, list) + assert isinstance(audit_events[0], GroupAuditEvent) + assert audit_events[0].id == id + + +def test_get_group_audit_events(group, resp_get_audit_event): + audit_event = group.audit_events.get(id) + assert isinstance(audit_event, GroupAuditEvent) + assert audit_event.id == id + + def test_list_project_audit_events(project, resp_list_audit_events): audit_events = project.audit_events.list() assert isinstance(audit_events, list) - assert isinstance(audit_events[0], ProjectAudit) + assert isinstance(audit_events[0], ProjectAuditEvent) assert audit_events[0].id == id def test_get_project_audit_events(project, resp_get_audit_event): audit_event = project.audit_events.get(id) - assert isinstance(audit_event, ProjectAudit) + assert isinstance(audit_event, ProjectAuditEvent) assert audit_event.id == id diff --git a/gitlab/v4/objects/audit_events.py b/gitlab/v4/objects/audit_events.py index a4437be29..c99856a9e 100644 --- a/gitlab/v4/objects/audit_events.py +++ b/gitlab/v4/objects/audit_events.py @@ -2,6 +2,7 @@ GitLab API: https://docs.gitlab.com/ee/api/audit_events.html """ +import warnings from gitlab.base import RESTManager, RESTObject from gitlab.mixins import RetrieveMixin @@ -9,6 +10,10 @@ __all__ = [ "AuditEvent", "AuditEventManager", + "GroupAuditEvent", + "GroupAuditEventManager", + "ProjectAuditEvent", + "ProjectAuditEventManager", "ProjectAudit", "ProjectAuditManager", ] @@ -24,12 +29,47 @@ class AuditEventManager(RetrieveMixin, RESTManager): _list_filters = ("created_after", "created_before", "entity_type", "entity_id") -class ProjectAudit(RESTObject): +class GroupAuditEvent(RESTObject): _id_attr = "id" -class ProjectAuditManager(RetrieveMixin, RESTManager): +class GroupAuditEventManager(RetrieveMixin, RESTManager): + _path = "/groups/%(group_id)s/audit_events" + _obj_cls = GroupAuditEvent + _from_parent_attrs = {"group_id": "id"} + _list_filters = ("created_after", "created_before") + + +class ProjectAuditEvent(RESTObject): + _id_attr = "id" + + def __init_subclass__(self): + warnings.warn( + "This class has been renamed to ProjectAuditEvent " + "and will be removed in a future release.", + DeprecationWarning, + 2, + ) + + +class ProjectAuditEventManager(RetrieveMixin, RESTManager): _path = "/projects/%(project_id)s/audit_events" - _obj_cls = ProjectAudit + _obj_cls = ProjectAuditEvent _from_parent_attrs = {"project_id": "id"} _list_filters = ("created_after", "created_before") + + def __init_subclass__(self): + warnings.warn( + "This class has been renamed to ProjectAuditEventManager " + "and will be removed in a future release.", + DeprecationWarning, + 2, + ) + + +class ProjectAudit(ProjectAuditEvent): + pass + + +class ProjectAuditManager(ProjectAuditEventManager): + pass diff --git a/gitlab/v4/objects/groups.py b/gitlab/v4/objects/groups.py index d96acfd5e..e859e0e9d 100644 --- a/gitlab/v4/objects/groups.py +++ b/gitlab/v4/objects/groups.py @@ -3,6 +3,7 @@ from gitlab.base import RESTManager, RESTObject from gitlab.mixins import CRUDMixin, ListMixin, ObjectDeleteMixin, SaveMixin from .access_requests import GroupAccessRequestManager +from .audit_events import GroupAuditEventManager from .badges import GroupBadgeManager from .boards import GroupBoardManager from .custom_attributes import GroupCustomAttributeManager @@ -34,6 +35,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject): _short_print_attr = "name" _managers = ( ("accessrequests", "GroupAccessRequestManager"), + ("audit_events", "GroupAuditEventManager"), ("badges", "GroupBadgeManager"), ("boards", "GroupBoardManager"), ("customattributes", "GroupCustomAttributeManager"), diff --git a/gitlab/v4/objects/projects.py b/gitlab/v4/objects/projects.py index c187ba95f..f4de18df7 100644 --- a/gitlab/v4/objects/projects.py +++ b/gitlab/v4/objects/projects.py @@ -25,7 +25,7 @@ from .deployments import ProjectDeploymentManager from .environments import ProjectEnvironmentManager from .events import ProjectEventManager -from .audit_events import ProjectAuditManager +from .audit_events import ProjectAuditEventManager from .export_import import ProjectExportManager, ProjectImportManager from .files import ProjectFileManager from .hooks import ProjectHookManager @@ -117,7 +117,7 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTO ("deployments", "ProjectDeploymentManager"), ("environments", "ProjectEnvironmentManager"), ("events", "ProjectEventManager"), - ("audit_events", "ProjectAuditManager"), + ("audit_events", "ProjectAuditEventManager"), ("exports", "ProjectExportManager"), ("files", "ProjectFileManager"), ("forks", "ProjectForkManager"),