web/lib/django/contrib/messages/api.py
changeset 38 77b6da96e6f1
parent 29 cc9b7e14412b
equal deleted inserted replaced
37:8d941af65caf 38:77b6da96e6f1
       
     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)