django-activity-audit 1.3.0.dev12__tar.gz → 1.3.0.dev14__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 (27) hide show
  1. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/PKG-INFO +1 -1
  2. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/__init__.py +8 -2
  3. django_activity_audit-1.3.0.dev14/activity_audit/constants.py +21 -0
  4. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/formatters.py +11 -9
  5. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/handlers.py +3 -3
  6. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/utils.py +14 -2
  7. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/pyproject.toml +1 -1
  8. django_activity_audit-1.3.0.dev12/activity_audit/constants.py +0 -8
  9. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/.gitignore +0 -0
  10. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/.pre-commit-config.yaml +0 -0
  11. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/LICENSE +0 -0
  12. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/MANIFEST.in +0 -0
  13. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/README.md +0 -0
  14. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/README.rst +0 -0
  15. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/REVIEW.md +0 -0
  16. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/apps.py +0 -0
  17. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/logger_levels.py +0 -0
  18. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/middleware.py +0 -0
  19. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/protocols.py +0 -0
  20. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/settings.py +0 -0
  21. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/signals.py +0 -0
  22. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/activity_audit/unregistered.py +0 -0
  23. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/docs/django-activity-audit.md +0 -0
  24. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/docs/user-activity-feed-plan.md +0 -0
  25. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/hatch +0 -0
  26. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/pytest.ini +0 -0
  27. {django_activity_audit-1.3.0.dev12 → django_activity_audit-1.3.0.dev14}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-activity-audit
3
- Version: 1.3.0.dev12
3
+ Version: 1.3.0.dev14
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
@@ -1,5 +1,6 @@
1
1
  default_app_config = "activity_audit.apps.AuditLoggingConfig"
2
2
 
3
+ from activity_audit.constants import LogType
3
4
  from activity_audit.utils import (
4
5
  get_api_handler,
5
6
  get_async_api_handler,
@@ -8,7 +9,9 @@ from activity_audit.utils import (
8
9
  get_async_login_handler,
9
10
  get_audit_handler,
10
11
  get_console_formatter,
11
- get_json_formatter,
12
+ get_app_formatter,
13
+ get_api_formatter,
14
+ get_audit_formatter,
12
15
  get_json_handler,
13
16
  get_login_handler,
14
17
  )
@@ -16,8 +19,11 @@ from activity_audit.utils import (
16
19
  from . import logger_levels
17
20
 
18
21
  __all__ = [
22
+ "LogType",
19
23
  "get_console_formatter",
20
- "get_json_formatter",
24
+ "get_app_formatter",
25
+ "get_api_formatter",
26
+ "get_audit_formatter",
21
27
  "get_json_handler",
22
28
  "get_api_handler",
23
29
  "get_audit_handler",
@@ -0,0 +1,21 @@
1
+ import enum
2
+
3
+
4
+ class LogType(str, enum.Enum):
5
+ APP = "app"
6
+ API = "api"
7
+ AUDIT = "audit"
8
+ LOGIN = "login"
9
+ CELERYWORKER = "celeryworker"
10
+ CELERYBEAT = "celerybeat"
11
+
12
+
13
+ CONSOLE_FORMAT = (
14
+ "%(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(message)s"
15
+ )
16
+
17
+ REQUEST_TYPES = [
18
+ "internal",
19
+ "external",
20
+ ]
21
+
@@ -4,6 +4,7 @@ import json
4
4
  import logging
5
5
  import uuid
6
6
 
7
+ from .constants import LogType
7
8
 
8
9
  def _json_default(obj):
9
10
  """
@@ -29,9 +30,10 @@ def _json_default(obj):
29
30
  return str(obj)
30
31
 
31
32
 
32
- class JsonFormatter(logging.Formatter):
33
- def __init__(self, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
33
+ class AppFormatter(logging.Formatter):
34
+ def __init__(self, log_type: str = LogType.APP, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
34
35
  super().__init__()
36
+ self.log_type = log_type
35
37
  self.timestamp_format = timestamp_format
36
38
 
37
39
  def format(
@@ -50,25 +52,22 @@ class JsonFormatter(logging.Formatter):
50
52
  "request_id": getattr(record, "request_id", "") or "",
51
53
  "message": record.getMessage(),
52
54
  "exception": "",
53
- # "extra": {},
55
+ "log_type": self.log_type,
54
56
  }
55
57
 
56
58
  # Add exception info if present for ERROR
57
59
  if record.exc_info:
58
60
  log_data["exception"] = "{}".format(self.formatException(record.exc_info))
59
61
 
60
- # Add extra fields if present
61
- # if hasattr(record, "extra"):
62
- # log_data.update(record.extra)
63
-
64
62
  return json.dumps(log_data, default=_json_default)
65
63
 
66
64
 
67
65
  class APIFormatter(logging.Formatter):
68
66
  """Custom formatter for audit logs that ensures consistent JSON formatting."""
69
67
 
70
- def __init__(self, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
68
+ def __init__(self, log_type: str = LogType.API, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
71
69
  super().__init__()
70
+ self.log_type = log_type
72
71
  self.timestamp_format = timestamp_format
73
72
 
74
73
  def format(self, record):
@@ -80,6 +79,7 @@ class APIFormatter(logging.Formatter):
80
79
  "level": record.levelname,
81
80
  "name": record.name,
82
81
  "message": record.getMessage(),
82
+ "log_type": self.log_type,
83
83
  }
84
84
 
85
85
  # Add all audit-specific fields if they exist
@@ -102,8 +102,9 @@ class APIFormatter(logging.Formatter):
102
102
 
103
103
 
104
104
  class AuditFormatter(logging.Formatter):
105
- def __init__(self, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
105
+ def __init__(self, log_type: str = LogType.AUDIT, timestamp_format: str = "%Y-%m-%d %H:%M:%S.%f"):
106
106
  super().__init__()
107
+ self.log_type = log_type
107
108
  self.timestamp_format = timestamp_format
108
109
 
109
110
  def format(self, record):
@@ -114,6 +115,7 @@ class AuditFormatter(logging.Formatter):
114
115
  "level": record.levelname,
115
116
  "name": record.name,
116
117
  "message": record.getMessage(),
118
+ "log_type": self.log_type,
117
119
  }
118
120
 
119
121
  audit_fields = [
@@ -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, JsonFormatter, LoginFormatter
6
+ from .formatters import APIFormatter, AuditFormatter, AppFormatter, LoginFormatter
7
7
  from .middleware import get_request_id
8
8
 
9
9
 
@@ -145,7 +145,7 @@ class AsyncLoginLogHandler(AsyncBaseAuditHandler):
145
145
  class AsyncJsonHandler(QueueHandler):
146
146
  """
147
147
  Non-blocking handler for general JSON logs. Wraps a RotatingFileHandler
148
- with JsonFormatter on the background thread.
148
+ with AppFormatter on the background thread.
149
149
  """
150
150
 
151
151
  def __init__(
@@ -163,7 +163,7 @@ class AsyncJsonHandler(QueueHandler):
163
163
  sync_handler = RotatingFileHandler(
164
164
  filename, mode, maxBytes, backupCount, encoding, delay
165
165
  )
166
- sync_handler.setFormatter(JsonFormatter())
166
+ sync_handler.setFormatter(AppFormatter())
167
167
  self._listener = QueueListener(
168
168
  log_queue, sync_handler, respect_handler_level=True
169
169
  )
@@ -7,9 +7,20 @@ def get_console_formatter() -> dict:
7
7
  }
8
8
 
9
9
 
10
- def get_json_formatter() -> dict:
10
+ def get_app_formatter(log_type: str = "app") -> dict:
11
11
  return {
12
- "()": "activity_audit.formatters.JsonFormatter",
12
+ "()": "activity_audit.formatters.AppFormatter",
13
+ "log_type": log_type,
14
+ }
15
+
16
+ def get_api_formatter() -> dict:
17
+ return {
18
+ "()": "activity_audit.formatters.APIFormatter"
19
+ }
20
+
21
+ def get_audit_formatter() -> dict:
22
+ return {
23
+ "()": "activity_audit.formatters.AuditFormatter"
13
24
  }
14
25
 
15
26
 
@@ -30,6 +41,7 @@ def get_json_handler(
30
41
  }
31
42
 
32
43
 
44
+
33
45
  def get_api_handler(
34
46
  filename: str = "audit_logs/api.log",
35
47
  ) -> dict:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "django-activity-audit"
3
- version = "1.3.0.dev12"
3
+ version = "1.3.0.dev14"
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" }
@@ -1,8 +0,0 @@
1
- CONSOLE_FORMAT = (
2
- "%(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(message)s"
3
- )
4
-
5
- REQUEST_TYPES = [
6
- "internal",
7
- "external",
8
- ]