python / expert
Snippet
Decorator Factory for Conditional Test Environment Setup
This expert decorator factory pattern dynamically applies Django test setting overrides based on control flow conditions evaluated at runtime. It combines Python function closure principles with Django's override_settings context manager to provide flexible setup environments for targeted unit tests.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from functools import wrapsfrom typing import Callablefrom django.test import override_settingsdef conditionally_override(**settings_kwargs):def decorator(func: Callable):@wraps(func)def wrapper(*args, **kwargs):if settings_kwargs.get('DEBUG', False):with override_settings(**settings_kwargs):return func(*args, **kwargs)return func(*args, **kwargs)return wrapperreturn decorator
django
Breakdown
1
from functools import wraps
Imports wraps decorator to preserve underlying function metadata.
2
from typing import Callable
Imports Callable type hint for decorating target function parameter.
3
from django.test import override_settings
Imports Django testing utility for overriding active application configuration settings.
4
def conditionally_override(**settings_kwargs):
Defines parameter factory accepting key-value pairs of settings to override.
5
def decorator(func: Callable):
Constructs decorator accepting target test function argument.
6
@wraps(func)
Applies metadata preservation onto nested wrapper execution unit.
7
def wrapper(*args, **kwargs):
Defines inner function wrapping test execution logic.
8
if settings_kwargs.get('DEBUG', False):
Evaluates dynamic predicate condition based on passed configuration dictionary.
9
with override_settings(**settings_kwargs):
Enters setting override context manager applying temporary configuration variables.
10
return func(*args, **kwargs)
Executes wrapped test function within overridden settings context scope.
11
return func(*args, **kwargs)
Executes test directly when conditional predicate evaluates false.
12
return wrapper
Returns decorated wrapper function signature.
13
return decorator
Returns decorator function from factory definition.