1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- import six
- from library.validator.utils import force_text, force_str
- from library.validator.translation import gettext as _
- def _flat_error_detail(detail):
- if isinstance(detail, list):
- return [_flat_error_detail(item) for item in detail]
- elif isinstance(detail, dict):
- return {
- key: _flat_error_detail(value)
- for key, value in six.iteritems(detail)
- }
- else:
- return force_text(detail)
- class BaseValidationError(Exception):
- default_detail = _('Base validation error')
- default_code = _('error')
- def __init__(self, detail=None, code=None):
- """
- :param detail: `detail` maybe a string, a dict or a list.
- :param code: error code, it not used for now.
- """
- if detail is None:
- detail = self.default_detail
- if code is None:
- code = self.default_code
- self.detail = _flat_error_detail(detail)
- self.code = code
- def get_detail(self):
- return self.detail
- def __str__(self):
- return force_str(self.detail)
- def __unicode__(self):
- return force_text(self.detail)
- def __repr__(self):
- detail = self.detail
- if len(detail) > 103:
- detail = detail[:100] + '...'
- return '{0}(detail={1!r})'.format(self.__class__.__name__, detail)
- class FieldRequiredError(BaseValidationError):
- default_detail = _('Field is required')
- default_code = _('error')
- class ValidationError(BaseValidationError):
- default_detail = _('Validation error')
- default_code = _('error')
- class FieldValidationError(BaseValidationError):
- default_detail = _('field Validation error')
- default_code = _('error')
- class UnicodeValidationError(FieldValidationError):
- def __init__(self, detail, code="error"):
- self.detail = detail
- self.code = code
- def __str__(self):
- return self.detail
- def __unicode__(self):
- return self.__str__()
|