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 details)
File details
Details for the file dj-loopbreaker-0.0.1.tar.gz
.
File metadata
- Download URL: dj-loopbreaker-0.0.1.tar.gz
- Upload date:
- Size: 2.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f29160a5811f25369aa9e02c39c1a1e7159ba4ae1db168553ca1f3d93fcc2d4 |
|
MD5 | c2e20c117a6194704467d585a7b878a2 |
|
BLAKE2b-256 | b3b71f31795328a6df731e7cfb35c7955fb14fed7538a0e0ed655d7ae29bbef9 |