diff options
| author | Joseph Kocherhans <joseph@jkocherhans.com> | 2010-01-05 03:56:19 +0000 |
|---|---|---|
| committer | Joseph Kocherhans <joseph@jkocherhans.com> | 2010-01-05 03:56:19 +0000 |
| commit | 471596fc1afcb9c6258d317c619eaf5fd394e797 (patch) | |
| tree | 193767161be3cc23dc2e6be5e4f16d8fd21a2925 /django/core/exceptions.py | |
| parent | 4e89105d64bb9e04c409139a41e9c7aac263df4c (diff) | |
Merged soc2009/model-validation to trunk. Thanks, Honza!
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12098 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/exceptions.py')
| -rw-r--r-- | django/core/exceptions.py | 38 |
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 + |
