Skip to main content

Break infinite loops in signals

Project description


coverage PyPI version

Django library which breaks infinite loops in signals


pip install dj-loopbreaker


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

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.

Source Distribution

dj-loopbreaker-0.0.1.tar.gz (2.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page