# Django 1.8.18.dev20170123152445 documentation

# Source code for django.contrib.messages.api

    from django.contrib.messages import constants
    from django.contrib.messages.storage import default_storage
    from django.http import HttpRequest

    __all__ = (
        'add_message', 'get_messages',
        'get_level', 'set_level',
        'debug', 'info', 'success', 'warning', 'error',
        'MessageFailure',
    )

    class MessageFailure(Exception):
        pass

    def add_message(request, level, message, extra_tags='', fail_silently=False):
        """
        Attempts to add a message to the request using the 'messages' app.
        """
        if not isinstance(request, HttpRequest):
            raise TypeError("add_message() argument must be an HttpRequest object, "
                            "not '%s'." % request.__class__.__name__)
        if hasattr(request, '_messages'):
            return request._messages.add(level, message, extra_tags)
        if not fail_silently:
            raise MessageFailure('You cannot add messages without installing '
                        'django.contrib.messages.middleware.MessageMiddleware')

    def get_messages(request):
        """
        Returns the message storage on the request if it exists, otherwise returns
        an empty list.
        """
        if hasattr(request, '_messages'):
            return request._messages
        else:
            return []

    def get_level(request):
        """
        Returns the minimum level of messages to be recorded.

        The default level is the ``MESSAGE_LEVEL`` setting. If this is not found,
        the ``INFO`` level is used.
        """
        if hasattr(request, '_messages'):
            storage = request._messages
        else:
            storage = default_storage(request)
        return storage.level

    def set_level(request, level):
        """
        Sets the minimum level of messages to be recorded, returning ``True`` if
        the level was recorded successfully.

        If set to ``None``, the default level will be used (see the ``get_level``
        method).
        """
        if not hasattr(request, '_messages'):
            return False
        request._messages.level = level
        return True

    def debug(request, message, extra_tags='', fail_silently=False):
        """
        Adds a message with the ``DEBUG`` level.
        """
        add_message(request, constants.DEBUG, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)

    def info(request, message, extra_tags='', fail_silently=False):
        """
        Adds a message with the ``INFO`` level.
        """
        add_message(request, constants.INFO, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)

    def success(request, message, extra_tags='', fail_silently=False):
        """
        Adds a message with the ``SUCCESS`` level.
        """
        add_message(request, constants.SUCCESS, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)

    def warning(request, message, extra_tags='', fail_silently=False):
        """
        Adds a message with the ``WARNING`` level.
        """
        add_message(request, constants.WARNING, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)

    def error(request, message, extra_tags='', fail_silently=False):
        """
        Adds a message with the ``ERROR`` level.
        """
        add_message(request, constants.ERROR, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)