|
1 from django.contrib.messages import constants |
|
2 from django.contrib.messages.storage import default_storage |
|
3 from django.utils.functional import lazy, memoize |
|
4 |
|
5 __all__ = ( |
|
6 'add_message', 'get_messages', |
|
7 'get_level', 'set_level', |
|
8 'debug', 'info', 'success', 'warning', 'error', |
|
9 ) |
|
10 |
|
11 |
|
12 class MessageFailure(Exception): |
|
13 pass |
|
14 |
|
15 |
|
16 def add_message(request, level, message, extra_tags='', fail_silently=False): |
|
17 """ |
|
18 Attempts to add a message to the request using the 'messages' app, falling |
|
19 back to the user's message_set if MessageMiddleware hasn't been enabled. |
|
20 """ |
|
21 if hasattr(request, '_messages'): |
|
22 return request._messages.add(level, message, extra_tags) |
|
23 if hasattr(request, 'user') and request.user.is_authenticated(): |
|
24 return request.user.message_set.create(message=message) |
|
25 if not fail_silently: |
|
26 raise MessageFailure('Without the django.contrib.messages ' |
|
27 'middleware, messages can only be added to ' |
|
28 'authenticated users.') |
|
29 |
|
30 |
|
31 def get_messages(request): |
|
32 """ |
|
33 Returns the message storage on the request if it exists, otherwise returns |
|
34 user.message_set.all() as the old auth context processor did. |
|
35 """ |
|
36 if hasattr(request, '_messages'): |
|
37 return request._messages |
|
38 |
|
39 def get_user(): |
|
40 if hasattr(request, 'user'): |
|
41 return request.user |
|
42 else: |
|
43 from django.contrib.auth.models import AnonymousUser |
|
44 return AnonymousUser() |
|
45 |
|
46 return lazy(memoize(get_user().get_and_delete_messages, {}, 0), list)() |
|
47 |
|
48 |
|
49 def get_level(request): |
|
50 """ |
|
51 Returns the minimum level of messages to be recorded. |
|
52 |
|
53 The default level is the ``MESSAGE_LEVEL`` setting. If this is not found, |
|
54 the ``INFO`` level is used. |
|
55 """ |
|
56 if hasattr(request, '_messages'): |
|
57 storage = request._messages |
|
58 else: |
|
59 storage = default_storage(request) |
|
60 return storage.level |
|
61 |
|
62 |
|
63 def set_level(request, level): |
|
64 """ |
|
65 Sets the minimum level of messages to be recorded, returning ``True`` if |
|
66 the level was recorded successfully. |
|
67 |
|
68 If set to ``None``, the default level will be used (see the ``get_level`` |
|
69 method). |
|
70 """ |
|
71 if not hasattr(request, '_messages'): |
|
72 return False |
|
73 request._messages.level = level |
|
74 return True |
|
75 |
|
76 |
|
77 def debug(request, message, extra_tags='', fail_silently=False): |
|
78 """ |
|
79 Adds a message with the ``DEBUG`` level. |
|
80 """ |
|
81 add_message(request, constants.DEBUG, message, extra_tags=extra_tags, |
|
82 fail_silently=fail_silently) |
|
83 |
|
84 |
|
85 def info(request, message, extra_tags='', fail_silently=False): |
|
86 """ |
|
87 Adds a message with the ``INFO`` level. |
|
88 """ |
|
89 add_message(request, constants.INFO, message, extra_tags=extra_tags, |
|
90 fail_silently=fail_silently) |
|
91 |
|
92 |
|
93 def success(request, message, extra_tags='', fail_silently=False): |
|
94 """ |
|
95 Adds a message with the ``SUCCESS`` level. |
|
96 """ |
|
97 add_message(request, constants.SUCCESS, message, extra_tags=extra_tags, |
|
98 fail_silently=fail_silently) |
|
99 |
|
100 |
|
101 def warning(request, message, extra_tags='', fail_silently=False): |
|
102 """ |
|
103 Adds a message with the ``WARNING`` level. |
|
104 """ |
|
105 add_message(request, constants.WARNING, message, extra_tags=extra_tags, |
|
106 fail_silently=fail_silently) |
|
107 |
|
108 |
|
109 def error(request, message, extra_tags='', fail_silently=False): |
|
110 """ |
|
111 Adds a message with the ``ERROR`` level. |
|
112 """ |
|
113 add_message(request, constants.ERROR, message, extra_tags=extra_tags, |
|
114 fail_silently=fail_silently) |