API Reference¶
Public API¶
The following are importable from django_query_budget:
query_budget¶
from django_query_budget import query_budget
Decorator and context manager for applying query budgets.
As a decorator:
@query_budget(total_runtime="10s", window="1m", action="REJECT", name="my-view")
def my_view(request):
...
As a context manager:
with query_budget(total_runtime="10s", window="1m"):
MyModel.objects.all()
Parameters:
total_runtime(str | timedelta) — Required. Max cumulative query time in the window.window(str | timedelta) — Required. Rolling time window.action(str) — Action on violation. Default:"LOG".max_queries(int) — Max query count in the window. Optional.max_single_query(str | timedelta) — Max single query duration. Optional.name(str) — Explicit scope name. Auto-generated from function name if omitted.constraints(list[Callable]) — Custom constraint callables. Optional.
query_tag¶
from django_query_budget import query_tag
Context manager for tagging queries:
with query_tag("reporting"):
Report.objects.all()
Tags are looked up in QUERY_BUDGET["tags"] for per-query budget overrides.
QueryBudgetExceeded¶
from django_query_budget import QueryBudgetExceeded
Exception raised by the REJECT action. Subclass of Exception (not DatabaseError).
Attributes:
violation— TheViolationdataclass with details about the breach.
register_action¶
from django_query_budget import register_action
register_action("MY_ACTION", my_action_callable)
Register a custom action by name.
register_hook¶
from django_query_budget import register_hook, ExecutionMode
register_hook("on_query_executed", my_callback, mode=ExecutionMode.ASYNC)
Register a hook for an event. See Hooks for details.
ExecutionMode¶
from django_query_budget import ExecutionMode
ExecutionMode.SYNC # Execute inline
ExecutionMode.ASYNC # Execute on background thread (default)
HookMode is available as a backwards-compatible alias for ExecutionMode.
BaseHook¶
from django_query_budget import BaseHook, ExecutionMode
class MyHook(BaseHook):
mode = ExecutionMode.ASYNC
def __call__(self, **kwargs):
...
Base class for class-based hooks.
Internal modules¶
These are not part of the public API but are documented for advanced use cases.
django_query_budget.budget¶
Budget dataclass and parse_duration() utility.
django_query_budget.tracker¶
BudgetTracker (in-memory accumulator) and BudgetStats (sync snapshot).
django_query_budget.constraints¶
Violation dataclass, check_total_runtime(), check_max_queries(), check_max_single_query(), check_constraints().
django_query_budget.fingerprint¶
fingerprint_sql(sql, *, lowercase=True) — Normalize SQL into a stable fingerprint.
django_query_budget.resolution¶
push_budget(), pop_budget(), current_budget(), push_tag(), pop_tag(), current_tag(), get_tracker(), clear_trackers().
django_query_budget.middleware¶
QueryBudgetMiddleware — Django middleware class.
django_query_budget.wrapper¶
query_budget_wrapper() — The execute wrapper installed on database connections.
django_query_budget.sync¶
BaseSyncBackend, RedisSyncBackend, DatabaseSyncBackend, SyncWorker.