summaryrefslogtreecommitdiff
path: root/django/core/exceptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/core/exceptions.py')
-rw-r--r--django/core/exceptions.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/django/core/exceptions.py b/django/core/exceptions.py
index 1c21031739..fee7db4778 100644
--- a/django/core/exceptions.py
+++ b/django/core/exceptions.py
@@ -32,6 +32,42 @@ class FieldError(Exception):
"""Some kind of problem with a model field."""
pass
-class ValidationError(Exception):
+NON_FIELD_ERRORS = '__all__'
+class BaseValidationError(Exception):
"""An error while validating data."""
+ def __init__(self, message, code=None, params=None):
+ import operator
+ from django.utils.encoding import force_unicode
+ """
+ ValidationError can be passed any object that can be printed (usually
+ a string), a list of objects or a dictionary.
+ """
+ if isinstance(message, dict):
+ self.message_dict = message
+ # Reduce each list of messages into a single list.
+ message = reduce(operator.add, message.values())
+
+ if isinstance(message, list):
+ self.messages = [force_unicode(msg) for msg in message]
+ else:
+ self.code = code
+ self.params = params
+ message = force_unicode(message)
+ self.messages = [message]
+
+ def __str__(self):
+ # This is needed because, without a __str__(), printing an exception
+ # instance would result in this:
+ # AttributeError: ValidationError instance has no attribute 'args'
+ # See http://www.python.org/doc/current/tut/node10.html#handling
+ if hasattr(self, 'message_dict'):
+ return repr(self.message_dict)
+ return repr(self.messages)
+
+class ValidationError(BaseValidationError):
pass
+
+class UnresolvableValidationError(BaseValidationError):
+ """Validation error that cannot be resolved by the user."""
+ pass
+