Skip to content

Commit 7a89b1d

Browse files
authored
Merge pull request #7 from maykinmedia/feature/add-logging
Add logging
2 parents 4a9b204 + a33917d commit 7a89b1d

File tree

11 files changed

+73
-2
lines changed

11 files changed

+73
-2
lines changed

backend/requirements/base.in

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ django-hijack
1212
django-redis
1313
django-rosetta
1414
maykin-2fa
15+
django-timeline-logger
1516

1617
# API libraries
1718
djangorestframework

backend/requirements/base.txt

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ django==4.2.11
3636
# via
3737
# -r requirements/base.in
3838
# django-admin-index
39+
# django-appconf
3940
# django-axes
4041
# django-cors-headers
4142
# django-formtools
@@ -49,13 +50,16 @@ django==4.2.11
4950
# django-sendfile2
5051
# django-simple-certmanager
5152
# django-solo
53+
# django-timeline-logger
5254
# django-two-factor-auth
5355
# djangorestframework
5456
# drf-spectacular
5557
# maykin-2fa
5658
# zgw-consumers
5759
django-admin-index==3.1.1
5860
# via -r requirements/base.in
61+
django-appconf==1.0.6
62+
# via django-timeline-logger
5963
django-axes==6.4.0
6064
# via -r requirements/base.in
6165
django-cors-headers==4.3.1
@@ -84,6 +88,8 @@ django-simple-certmanager==2.0.0
8488
# via zgw-consumers
8589
django-solo==2.2.0
8690
# via zgw-consumers
91+
django-timeline-logger==4.0.0
92+
# via -r requirements/base.in
8793
django-two-factor-auth[phonenumberslite,webauthn]==1.16.0
8894
# via maykin-2fa
8995
djangorestframework==3.15.1

backend/requirements/ci.txt

+11
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ django==4.2.11
7878
# -c requirements/base.txt
7979
# -r requirements/base.txt
8080
# django-admin-index
81+
# django-appconf
8182
# django-axes
8283
# django-cors-headers
8384
# django-formtools
@@ -92,6 +93,7 @@ django==4.2.11
9293
# django-sendfile2
9394
# django-simple-certmanager
9495
# django-solo
96+
# django-timeline-logger
9597
# django-two-factor-auth
9698
# djangorestframework
9799
# drf-spectacular
@@ -101,6 +103,11 @@ django-admin-index==3.1.1
101103
# via
102104
# -c requirements/base.txt
103105
# -r requirements/base.txt
106+
django-appconf==1.0.6
107+
# via
108+
# -c requirements/base.txt
109+
# -r requirements/base.txt
110+
# django-timeline-logger
104111
django-axes==6.4.0
105112
# via
106113
# -c requirements/base.txt
@@ -168,6 +175,10 @@ django-solo==2.2.0
168175
# -c requirements/base.txt
169176
# -r requirements/base.txt
170177
# zgw-consumers
178+
django-timeline-logger==4.0.0
179+
# via
180+
# -c requirements/base.txt
181+
# -r requirements/base.txt
171182
django-two-factor-auth[phonenumberslite,webauthn]==1.16.0
172183
# via
173184
# -c requirements/base.txt

backend/requirements/dev.txt

+11
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ django==4.2.11
111111
# -c requirements/ci.txt
112112
# -r requirements/ci.txt
113113
# django-admin-index
114+
# django-appconf
114115
# django-axes
115116
# django-cors-headers
116117
# django-debug-toolbar
@@ -127,6 +128,7 @@ django==4.2.11
127128
# django-sendfile2
128129
# django-simple-certmanager
129130
# django-solo
131+
# django-timeline-logger
130132
# django-two-factor-auth
131133
# djangorestframework
132134
# drf-spectacular
@@ -136,6 +138,11 @@ django-admin-index==3.1.1
136138
# via
137139
# -c requirements/ci.txt
138140
# -r requirements/ci.txt
141+
django-appconf==1.0.6
142+
# via
143+
# -c requirements/ci.txt
144+
# -r requirements/ci.txt
145+
# django-timeline-logger
139146
django-axes==6.4.0
140147
# via
141148
# -c requirements/ci.txt
@@ -209,6 +216,10 @@ django-solo==2.2.0
209216
# -c requirements/ci.txt
210217
# -r requirements/ci.txt
211218
# zgw-consumers
219+
django-timeline-logger==4.0.0
220+
# via
221+
# -c requirements/ci.txt
222+
# -r requirements/ci.txt
212223
django-two-factor-auth[phonenumberslite,webauthn]==1.16.0
213224
# via
214225
# -c requirements/ci.txt

backend/src/openarchiefbeheer/conf/base.py

+2
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,12 @@
119119
"drf_spectacular",
120120
"zgw_consumers",
121121
"simple_certmanager",
122+
"timeline_logger",
122123
# Project applications.
123124
"openarchiefbeheer.accounts",
124125
"openarchiefbeheer.destruction",
125126
"openarchiefbeheer.utils",
127+
"openarchiefbeheer.logging",
126128
]
127129

128130
MIDDLEWARE = [

backend/src/openarchiefbeheer/destruction/api/serializers.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from rest_framework.exceptions import ValidationError
66

77
from openarchiefbeheer.accounts.api.serializers import UserSerializer
8+
from openarchiefbeheer.logging import logevent
89

910
from ..constants import ListItemStatus
1011
from ..models import DestructionList, DestructionListAssignee, DestructionListItem
@@ -58,7 +59,8 @@ def create(self, validated_data: dict) -> DestructionList:
5859
assignees_data = validated_data.pop("assignees")
5960
items_data = validated_data.pop("items")
6061

61-
validated_data["author"] = self.context["request"].user
62+
author = self.context["request"].user
63+
validated_data["author"] = author
6264
destruction_list = DestructionList.objects.create(**validated_data)
6365

6466
DestructionListItem.objects.bulk_create(
@@ -77,4 +79,7 @@ def create(self, validated_data: dict) -> DestructionList:
7779
)
7880

7981
destruction_list.assign(assignees[0])
82+
83+
logevent.destruction_list_created(destruction_list, author)
84+
8085
return destruction_list

backend/src/openarchiefbeheer/destruction/api/viewsets.py

-1
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,4 @@ def get_permissions(self):
2121

2222
@transaction.atomic
2323
def create(self, request, *args, **kwargs):
24-
# TODO log creation
2524
return super().create(request, *args, **kwargs)

backend/src/openarchiefbeheer/destruction/tests/test_serializers.py

+12
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from freezegun import freeze_time
99
from rest_framework.test import APIRequestFactory
10+
from timeline_logger.models import TimelineLog
1011

1112
from openarchiefbeheer.accounts.tests.factories import UserFactory
1213
from openarchiefbeheer.destruction.api.serializers import DestructionListSerializer
@@ -88,6 +89,17 @@ def test_create_destruction_list(self):
8889
self.assertEqual(sent_mail[0].subject, _("Destruction list review request"))
8990
self.assertEqual(sent_mail[0].recipients(), ["[email protected]"])
9091

92+
logs = TimelineLog.objects.filter(user=record_manager)
93+
94+
self.assertEqual(logs.count(), 1)
95+
96+
message = logs[0].get_message()
97+
98+
self.assertEqual(
99+
message,
100+
'[2024-05-02T16:00:00+02:00]: Destruction list "A test list" created by user record_manager.',
101+
)
102+
91103
def test_zaak_already_included_in_other_list(self):
92104
user1 = UserFactory.create(
93105
username="reviewer1", role__can_review_destruction=True

backend/src/openarchiefbeheer/logging/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from django.db.models import Model
2+
3+
from timeline_logger.models import TimelineLog
4+
5+
from openarchiefbeheer.accounts.models import User
6+
from openarchiefbeheer.destruction.models import DestructionList
7+
8+
9+
def _create_log(
10+
model: Model, event: str, extra_data: dict | None = None, user: User | None = None
11+
) -> TimelineLog:
12+
return TimelineLog.objects.create(
13+
content_object=model,
14+
template=f"logging/{event}.txt",
15+
extra_data=extra_data,
16+
user=user,
17+
)
18+
19+
20+
def destruction_list_created(destruction_list: DestructionList, user: User) -> None:
21+
_create_log(model=destruction_list, event="destruction_list_created", user=user)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{% load i18n %}{% blocktranslate trimmed with timestamp=log.timestamp|date:"c" list_name=log.content_object.name user=log.user %}
2+
[{{ timestamp }}]: Destruction list "{{ list_name }}" created by user {{ user }}.
3+
{% endblocktranslate %}

0 commit comments

Comments
 (0)