Skip to main content

Break infinite loops in signals

Project description

dj-loopbreaker

coverage PyPI version

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for dj-loopbreaker, version 0.0.1
Filename, size File type Python version Upload date Hashes
Filename, size dj-loopbreaker-0.0.1.tar.gz (2.4 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page