django-activity-audit 1.3.0.dev16__tar.gz → 1.3.0.dev18__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/.gitignore +2 -0
  2. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/PKG-INFO +1 -1
  3. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/constants.py +0 -1
  4. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/formatters.py +16 -3
  5. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/handlers.py +1 -1
  6. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/signals.py +5 -6
  7. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/utils.py +4 -7
  8. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/pyproject.toml +1 -1
  9. django_activity_audit-1.3.0.dev16/uv.lock +0 -938
  10. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/.pre-commit-config.yaml +0 -0
  11. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/LICENSE +0 -0
  12. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/MANIFEST.in +0 -0
  13. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/README.md +0 -0
  14. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/README.rst +0 -0
  15. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/__init__.py +3 -3
  16. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/apps.py +0 -0
  17. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/logger_levels.py +0 -0
  18. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/middleware.py +0 -0
  19. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/protocols.py +0 -0
  20. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/settings.py +0 -0
  21. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/activity_audit/unregistered.py +0 -0
  22. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/docs/django-activity-audit.md +0 -0
  23. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/docs/improvements.md +0 -0
  24. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/docs/user-activity-feed-plan.md +0 -0
  25. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/hatch +0 -0
  26. {django_activity_audit-1.3.0.dev16 → django_activity_audit-1.3.0.dev18}/pytest.ini +0 -0
@@ -140,4 +140,6 @@ Thumbs.db
140
140
  # Project specific
141
141
  db_test.sqlite3
142
142
  .serena/
143
+ uv.lock
144
+ tests/audit/
143
145
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-activity-audit
3
- Version: 1.3.0.dev16
3
+ Version: 1.3.0.dev18
4
4
  Summary: A Django package for easy CRUD operation logging and container logs
5
5
  Project-URL: Homepage, https://github.com/shree256/django-activity-audit
6
6
  Project-URL: Repository, https://github.com/shree256/django-activity-audit
@@ -18,4 +18,3 @@ REQUEST_TYPES = [
18
18
  "internal",
19
19
  "external",
20
20
  ]
21
-
@@ -7,6 +7,7 @@ import uuid
7
7
  from .constants import LogType
8
8
  from .middleware import get_request_id
9
9
 
10
+
10
11
  def _json_default(obj):
11
12
  """
12
13
  Serializer for non-JSON-native types.
@@ -32,7 +33,11 @@ def _json_default(obj):
32
33
 
33
34
 
34
35
  class AppFormatter(logging.Formatter):
35
- def __init__(self, log_type: str = LogType.APP, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
36
+ def __init__(
37
+ self,
38
+ log_type: str = LogType.APP,
39
+ timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f",
40
+ ):
36
41
  super().__init__()
37
42
  self.log_type = log_type
38
43
  self.timestamp_format = timestamp_format
@@ -66,7 +71,11 @@ class AppFormatter(logging.Formatter):
66
71
  class APIFormatter(logging.Formatter):
67
72
  """Custom formatter for audit logs that ensures consistent JSON formatting."""
68
73
 
69
- def __init__(self, log_type: str = LogType.API, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
74
+ def __init__(
75
+ self,
76
+ log_type: str = LogType.API,
77
+ timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f",
78
+ ):
70
79
  super().__init__()
71
80
  self.log_type = log_type
72
81
  self.timestamp_format = timestamp_format
@@ -103,7 +112,11 @@ class APIFormatter(logging.Formatter):
103
112
 
104
113
 
105
114
  class AuditFormatter(logging.Formatter):
106
- def __init__(self, log_type: str = LogType.AUDIT, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
115
+ def __init__(
116
+ self,
117
+ log_type: str = LogType.AUDIT,
118
+ timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f",
119
+ ):
107
120
  super().__init__()
108
121
  self.log_type = log_type
109
122
  self.timestamp_format = timestamp_format
@@ -3,7 +3,7 @@ import queue
3
3
 
4
4
  from logging.handlers import QueueHandler, QueueListener, RotatingFileHandler
5
5
 
6
- from .formatters import APIFormatter, AuditFormatter, AppFormatter, LoginFormatter
6
+ from .formatters import APIFormatter, AppFormatter, AuditFormatter, LoginFormatter
7
7
  from .middleware import get_request_id
8
8
 
9
9
 
@@ -256,23 +256,22 @@ def patch_model_event(model_class: type[models.Model]) -> None:
256
256
  instance: models.Model,
257
257
  action: str,
258
258
  pk_set: set,
259
+ _field_name: str = field.name,
259
260
  **kwargs: Any,
260
261
  ) -> None:
261
262
  if action not in ["post_add", "post_remove", "post_clear"]:
262
263
  return
263
264
 
264
- field_name = kwargs.get("model", sender).__name__.lower()
265
- instance_repr = instance_to_dict(instance)
266
-
267
265
  push_log(
268
266
  f"M2M {action} event by {model_class.__name__} (id: {instance.pk})",
269
267
  model_class.__name__,
270
268
  EVENT_TYPES[5],
271
269
  str(instance.pk),
272
- instance_repr,
270
+ {"id": str(instance.pk)},
273
271
  {
274
- "field_name": field_name,
275
- "related_ids": list(map(str, pk_set)) if pk_set else None,
272
+ "action": action,
273
+ "field_name": _field_name,
274
+ "related_ids": list(map(str, pk_set)) if pk_set else [],
276
275
  },
277
276
  )
278
277
 
@@ -13,15 +13,13 @@ def get_app_formatter(log_type: str = "app") -> dict:
13
13
  "log_type": log_type,
14
14
  }
15
15
 
16
+
16
17
  def get_api_formatter() -> dict:
17
- return {
18
- "()": "activity_audit.formatters.APIFormatter"
19
- }
18
+ return {"()": "activity_audit.formatters.APIFormatter"}
19
+
20
20
 
21
21
  def get_audit_formatter() -> dict:
22
- return {
23
- "()": "activity_audit.formatters.AuditFormatter"
24
- }
22
+ return {"()": "activity_audit.formatters.AuditFormatter"}
25
23
 
26
24
 
27
25
  def get_json_handler(
@@ -41,7 +39,6 @@ def get_json_handler(
41
39
  }
42
40
 
43
41
 
44
-
45
42
  def get_api_handler(
46
43
  filename: str = "audit_logs/api.log",
47
44
  ) -> dict:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "django-activity-audit"
3
- version = "1.3.0.dev16"
3
+ version = "1.3.0.dev18"
4
4
  description = "A Django package for easy CRUD operation logging and container logs"
5
5
  authors = [
6
6
  { name = "Shreeshan", email = "shreeshan256@gmail.com" }