Break infinite loops in signals
Project description
dj-loopbreaker
Django library which breaks infinite loops in signals
Installation
pip install dj-loopbreaker
Usage
from loopbreaker import throttle
The problem
Imagine you have a signal like this:
@receiver(post_save, sender=Todo, dispatch_uid="example.say_hi")
@throttle(signal_id="update.todo", expire_after=1)
def update_todo(instance, created, **kwargs):
# normally this would cause an infinte loop
instance.done = not instance.done
instance.save()
Normally that would cause an infinite loop. However, include the @throttle
decorator, and it will now make sure that this signal is only
executed again after 1 second for this specific instance.
How it works
throttle
uses Django's caching mechanism. It will create a key using the following format: {signal_id}.{app_label}{model_name}{instance_id}
. The key will expire after expire_after
seconds
This means:
- No longer need to worry about making infinite loops in your signals
- No dependencies, or dependencies at your own discretion (we use django's internal caching, so you can set up your caching backend)
- Throttling occurs per instance (not per model)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dj-loopbreaker-0.0.1.tar.gz
(2.4 kB
view hashes)