File: signals.py

package info (click to toggle)
python-django-crum 0.7.9-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 236 kB
  • sloc: python: 449; makefile: 221
file content (52 lines) | stat: -rw-r--r-- 1,467 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Django
from django.dispatch import Signal, receiver

__all__ = ['current_user_getter']


# Signal used when getting current user. Receivers should return a tuple of
# (user, priority).
current_user_getter = Signal()


# Signal used when setting current user. Takes one keyword argument: 'user'.
# Receivers should store the current user as needed. Return values are ignored.
current_user_setter = Signal()


@receiver(current_user_getter)
def _get_current_user_from_request(sender, **kwargs):
    """
    Signal handler to retrieve current user from request.
    """
    from crum import get_current_request
    return (getattr(get_current_request(), 'user', False), -10)


@receiver(current_user_getter)
def _get_current_user_from_thread_locals(sender, **kwargs):
    """
    Signal handler to retrieve current user from thread locals.
    """
    from crum import _thread_locals
    return (getattr(_thread_locals, 'user', False), 10)


@receiver(current_user_setter)
def _set_current_user_on_request(sender, **kwargs):
    """
    Signal handler to store current user to request.
    """
    from crum import get_current_request
    request = get_current_request()
    if request:
        request.user = kwargs['user']


@receiver(current_user_setter)
def _set_current_user_on_thread_locals(sender, **kwargs):
    """
    Signal handler to store current user on thread locals.
    """
    from crum import _thread_locals
    _thread_locals.user = kwargs['user']