Skip to content

Instantly share code, notes, and snippets.

@senden9
Forked from josharian/django_sleep.py
Last active December 19, 2015 18:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save senden9/6002582 to your computer and use it in GitHub Desktop.
Save senden9/6002582 to your computer and use it in GitHub Desktop.
"""
This module provides very simple Django middleware that sleeps on every request.
This is useful when you want to simulate slow response times (as might be
encountered, say, on a cell network).
To use, add this middleware, and add a value for SLEEP_TIME to your settings.
New feature: Look for an X-Django-Sleep header on each request,
to let the client specify per-request sleep time. The header override your settings.
X-Django-Sleep can be an float or an integer. If you use Firefox you can use the 'Modify Headers' addon
( https://addons.mozilla.org/en-US/firefox/addon/modify-headers/ ).
"""
import time
import django.core.exceptions
from django.conf import settings
class SleepMiddleware(object):
def __init__(self):
try:
self.sleep_time = settings.SLEEP_TIME
except AttributeError:
raise django.core.exceptions.MiddlewareNotUsed
if not isinstance(self.sleep_time, (int, float)) or self.sleep_time <= 0:
raise django.core.exceptions.MiddlewareNotUsed
def process_request(self, request):
try:
header = float(request.META['HTTP_X_DJANGO_SLEEP'])
except (KeyError, ValueError):
header = None
if header >= 0:
time.sleep(header)
else:
time.sleep(self.sleep_time)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment