python / intermediate
Snippet
Context Manager zum Stummschalten von Django-Signalen bei Unit-Tests
Das Erstellen eines Context Managers mit @contextmanager hilft, Model-Signale in Unit-Tests vorübergehend zu trennen, um unerwünschte Seiteneffekte wie den E-Mail-Versand zu verhindern.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
from contextlib import contextmanagerfrom django.db.models.signals import post_save@contextmanagerdef mute_signal(signal, receiver, sender):signal.disconnect(receiver, sender=sender)try:yieldfinally:signal.connect(receiver, sender=sender)
django
Erklärung
1
@contextmanager
Dekorator aus contextlib, der einen Generator in einen Python Context Manager umwandelt.
2
signal.disconnect(receiver, sender=sender)
Trennt den Signal-Handler vorübergehend vor dem Ausführen des Kontext-Blocks.
3
signal.connect(receiver, sender=sender)
Verbindet den Signal-Handler im finally-Block nach dem Verlassen des Kontexts wieder.