Utilities¶
drf-commons includes utility modules for debug instrumentation, structured logging, and middleware validation.
Debug Package¶
The debug package provides structured logging and development observability
tools.
StructuredLogger¶
from drf_commons.debug import StructuredLogger
A category-based logger for structured, machine-readable log output. Provides purpose-specific log methods for common API observability concerns.
logger = StructuredLogger("myapp")
Methods:
log_user_action¶
logger.log_user_action(
user, # AbstractBaseUser
action: str, # "CREATE", "UPDATE", "DELETE", etc.
resource: str, # Model name or resource identifier
details: dict, # Arbitrary context
)
Use for audit trail logging at the service or view layer.
logger.log_user_action(
user=request.user,
action="BULK_DELETE",
resource="Article",
details={"count": 15, "ids": deleted_ids},
)
log_api_request¶
logger.log_api_request(
request, # DRF or Django request
response, # DRF or Django response
duration: float, # Seconds
)
log_error¶
logger.log_error(
error: Exception,
context: dict = None,
)
log_performance¶
logger.log_performance(
operation: str,
duration: float, # Seconds
details: dict = None,
)
Logging Categories¶
The debug package organizes logging by category. Categories are defined in
drf_commons.debug.core.categories and can be selectively enabled in
the COMMON settings:
COMMON = {
"DEBUG_ENABLED_CATEGORIES": ["API", "DATABASE", "PERFORMANCE"],
}
Available categories: API, DATABASE, CACHE, PERFORMANCE,
ERRORS, USER_ACTIONS.
Debug Utilities¶
from drf_commons.debug.utils import (
debug_print,
debug_sql_queries,
capture_request_data,
log_model_changes,
profile_function,
memory_usage,
)
Function |
Description |
|---|---|
|
Pretty-prints any object with type information |
|
Formats and prints SQL queries from Django’s query log |
|
Returns a dict with request method, path, headers, and body |
|
Diffs two model instances and logs changed fields |
|
Runs |
|
Returns current process memory in MB (requires |
Middleware Checker¶
from drf_commons.utils.middleware_checker import MiddlewareChecker, require_middleware
MiddlewareChecker¶
Provides runtime middleware validation.
checker = MiddlewareChecker()
# Check if a middleware is installed
is_installed = checker.is_installed("drf_commons.middlewares.CurrentUserMiddleware")
# Require a middleware or raise ImproperlyConfigured
checker.require("drf_commons.middlewares.CurrentUserMiddleware")
require_middleware¶
A decorator that enforces middleware presence before a function executes:
from drf_commons.utils.middleware_checker import require_middleware
@require_middleware("drf_commons.middlewares.CurrentUserMiddleware")
def my_service_function():
user = get_current_user()
...
enforce_current_user_middleware_if_used¶
Called automatically from DrfCommonsConfig.ready(). Inspects the
installed application models and enforces CurrentUserMiddleware if any
model uses UserActionMixin or CurrentUserField.
This function should not be called manually in application code.
Test Utilities¶
See Testing for the complete testing utilities documentation.