python / expert
Snippet
Dekorator-Fabrik für den bedingten Aufbau von Testumgebungen
Diese Dekorator-Fabrik wendet Djangos Testeinstellungs-Overrides basierend auf Ausführungsbedingungen zur Laufzeit dynamisch an. Sie kombiniert Python-Closure-Prinzipien mit Djangos override_settings-Kontext-Manager, um flexible Testumgebungen bereitzustellen.
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
Erklärung
1
from functools import wraps
Importiert den wraps-Dekorator zur Erhaltung der Metadaten der ursprünglichen Funktion.
2
from typing import Callable
Importiert den Typ-Hinweis Callable für das Funktionsargument.
3
from django.test import override_settings
Importiert das Django-Testprogramm zum Überschreiben aktiver Konfigurationseinstellungen.
4
def conditionally_override(**settings_kwargs):
Definiert eine Fabrikfunktion, die Schlüssel-Wert-Paare von Testeinstellungen akzeptiert.
5
def decorator(func: Callable):
Erstellt den eigentlichen Dekorator für die Ziel-Testfunktion.
6
@wraps(func)
Wendet die Metadaten-Erhaltung auf die innere Wrapper-Funktion an.
7
def wrapper(*args, **kwargs):
Definiert die Wrapper-Funktion um die Ausführungslogik.
8
if settings_kwargs.get('DEBUG', False):
Wertet eine dynamische Bedingung basierend auf dem Konfigurations-Dictionary aus.
9
with override_settings(**settings_kwargs):
Aktiviert den Kontext-Manager zum temporären Überschreiben der Einstellungen.
10
return func(*args, **kwargs)
Führt die dekorierte Funktion im überschriebenen Konfigurationskontext aus.
11
return func(*args, **kwargs)
Führt den Test direkt aus, wenn die Bedingung nicht erfüllt ist.
12
return wrapper
Gibt die dekorierte Wrapper-Funktion zurück.
13
return decorator
Gibt die Dekorator-Funktion der Fabrik zurück.