diff options
author | Raffaele Salmaso <raffaele.salmaso@gmail.com> | 2017-01-10 00:03:10 +0100 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2017-01-09 18:03:10 -0500 |
commit | ed8c0c941df0f321fb5751db572a9ec773d5118a (patch) | |
tree | 7235cbbbef8f3b2ace26f46c2384ecae25fa0e6f /django/contrib/messages/api.py | |
parent | 7dc8d9238aed6267d6f21e05d0f02eb8ec2007ec (diff) | |
download | django-ed8c0c941df0f321fb5751db572a9ec773d5118a.tar.gz |
Fixed #27688 -- Made messages' add_message() request check use ducktyping.
Diffstat (limited to 'django/contrib/messages/api.py')
-rw-r--r-- | django/contrib/messages/api.py | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/django/contrib/messages/api.py b/django/contrib/messages/api.py index ceb6057f8d..f77cf26de5 100644 --- a/django/contrib/messages/api.py +++ b/django/contrib/messages/api.py @@ -1,6 +1,5 @@ from django.contrib.messages import constants from django.contrib.messages.storage import default_storage -from django.http import HttpRequest __all__ = ( 'add_message', 'get_messages', @@ -18,16 +17,21 @@ 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' - ) + try: + messages = request._messages + except AttributeError: + if not hasattr(request, 'META'): + raise TypeError( + "add_message() argument must be an HttpRequest object, not " + "'%s'." % request.__class__.__name__ + ) + if not fail_silently: + raise MessageFailure( + 'You cannot add messages without installing ' + 'django.contrib.messages.middleware.MessageMiddleware' + ) + else: + return messages.add(level, message, extra_tags) def get_messages(request): |