Source code for jmb.core.middleware.thread_local
"""
.. _thread-local:
thread_local
============
this middleware takes the user from a request and places it into a
threadlocal, so it can be retrieved in other contests
Stolen from a mail to django usergroup by Luke Plant - 17.6.2006
.. autofunction:: get_current_user
"""
from __future__ import unicode_literals
from threading import local
from django.contrib.auth.models import AnonymousUser
try:
from django.utils.deprecation import MiddlewareMixin
except ImportError:
MiddlewareMixin = object
_thread_locals = local()
_anonymous = AnonymousUser()
[docs]def get_current_user():
"""Return the user in the current thread
Tipical usage::
from jmb.core.middleware.thread_local import get_current_user
user = get_current_user()
When working in the shell you can pretend you are a user using setting
INTERACTIVE_USER in django.conf.settings. That's easily done via the
:func:`jmb.core.conf.set_interactive_user` ::
from jmb.core.conf import set_interactive_user
set_interactive_user('admin')
"""
try:
user = getattr(_thread_locals.request, 'user', None)
except AttributeError:
# when using from shell
user = None
if user:
return user
else:
# permette di usare jumbo.conf.set_interactive_user
from django.conf import settings
return getattr(settings, 'INTERACTIVE_USER', _anonymous)
def get_request():
request = getattr(_thread_locals, 'request', None)
return request
class ThreadLocals(MiddlewareMixin):
"""Middleware that gets various objects from the
request object and saves them in thread local storage."""
def process_request(self, request):
_thread_locals.request = request
_thread_locals.user = getattr(request, 'user', None)