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.

Source Distribution

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

Uploaded Source

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

Hashes for dj-loopbreaker-0.0.1.tar.gz
Algorithm Hash digest
SHA256 8f29160a5811f25369aa9e02c39c1a1e7159ba4ae1db168553ca1f3d93fcc2d4
MD5 c2e20c117a6194704467d585a7b878a2
BLAKE2b-256 b3b71f31795328a6df731e7cfb35c7955fb14fed7538a0e0ed655d7ae29bbef9

See more details on using hashes here.

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