I'm writing a middleware for a Django app of mine where I get a variable from request.session
and then have to insert it into a redis sorted set. Fairly straight forward.
I.e.
import os
#os.environ.setdefault("DJANGO_SETTINGS_MODULE","myproject.settings")
from myapp.redis_functions import set_whose_online
class WhoseOnlineMiddleware(object):
def process_request(self, request):
if '_auth_user_id' in request.session:
set_whose_online(request.session['_auth_user_id'])
else:
pass
redis_functions.py
contains all redis related functions in my app. The redis connection pool is instantiated there as well.
But this is giving me an ImporperlyConfigured
error at import
. The full traceback is:
Traceback (most recent call last):
File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 72, in __call__
return self.application(environ, start_response)
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/dj_static.py", line 83, in __call__
return self.application(environ, start_response)
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 236, in __call__
self.load_middleware()
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 53, in load_middleware
raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
ImproperlyConfigured: Error importing middleware myproject.middleware.WhoseOnline: "cannot import name add_filtered_post"
It's perplexing because I'm not trying to import add_filtered_post
, I'm trying to import set_whose_online
. add_filtered_post
is another function in redis_functions.py
, used entirely elsewhere.
What could be possibly going on, and how can I remedy this problem? I was guessing circular imports are to blame, but python manage.py validate --traceback
returns 0 errors.
Here's what I have in my settings.py
:
MIDDLEWARE_CLASSES = (
'myproject.middleware.XForwardedFor.XForwardedForMiddleware',
'user_sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'myproject.middleware.WhoseOnline.WhoseOnlineMiddleware',
#'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'myproject.middleware.HellBanned.HellBannedMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'mobileesp.middleware.MobileDetectionMiddleware',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Note: the middleware is added at myfolder/myproject/middleware/WhoseOnline.py
, i.e the same folder as settings.py, urls, templates
While there could be various reasons for this to happen, in my particular case it was because of circular imports. I diagnosed and solved the problem, and this went away.