mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 18:13:57 +03:00
Revert "feat: Add some changes to ValidationError to support django style vad…" (#9326)
This reverts commit 4abfa28e08
.
Co-authored-by: Tom Christie <tom@tomchristie.com>
This commit is contained in:
parent
56a5b354d0
commit
0e4ed81627
|
@ -144,30 +144,17 @@ class ValidationError(APIException):
|
||||||
status_code = status.HTTP_400_BAD_REQUEST
|
status_code = status.HTTP_400_BAD_REQUEST
|
||||||
default_detail = _('Invalid input.')
|
default_detail = _('Invalid input.')
|
||||||
default_code = 'invalid'
|
default_code = 'invalid'
|
||||||
default_params = {}
|
|
||||||
|
|
||||||
def __init__(self, detail=None, code=None, params=None):
|
def __init__(self, detail=None, code=None):
|
||||||
if detail is None:
|
if detail is None:
|
||||||
detail = self.default_detail
|
detail = self.default_detail
|
||||||
if code is None:
|
if code is None:
|
||||||
code = self.default_code
|
code = self.default_code
|
||||||
if params is None:
|
|
||||||
params = self.default_params
|
|
||||||
|
|
||||||
# For validation failures, we may collect many errors together,
|
# For validation failures, we may collect many errors together,
|
||||||
# so the details should always be coerced to a list if not already.
|
# so the details should always be coerced to a list if not already.
|
||||||
if isinstance(detail, str):
|
if isinstance(detail, tuple):
|
||||||
detail = [detail % params]
|
detail = list(detail)
|
||||||
elif isinstance(detail, ValidationError):
|
|
||||||
detail = detail.detail
|
|
||||||
elif isinstance(detail, (list, tuple)):
|
|
||||||
final_detail = []
|
|
||||||
for detail_item in detail:
|
|
||||||
if isinstance(detail_item, ValidationError):
|
|
||||||
final_detail += detail_item.detail
|
|
||||||
else:
|
|
||||||
final_detail += [detail_item % params if isinstance(detail_item, str) else detail_item]
|
|
||||||
detail = final_detail
|
|
||||||
elif not isinstance(detail, dict) and not isinstance(detail, list):
|
elif not isinstance(detail, dict) and not isinstance(detail, list):
|
||||||
detail = [detail]
|
detail = [detail]
|
||||||
|
|
||||||
|
|
|
@ -109,89 +109,3 @@ class TestValidationErrorConvertsTuplesToLists(TestCase):
|
||||||
assert len(error.detail) == 2
|
assert len(error.detail) == 2
|
||||||
assert str(error.detail[0]) == 'message1'
|
assert str(error.detail[0]) == 'message1'
|
||||||
assert str(error.detail[1]) == 'message2'
|
assert str(error.detail[1]) == 'message2'
|
||||||
|
|
||||||
|
|
||||||
class TestValidationErrorWithDjangoStyle(TestCase):
|
|
||||||
def test_validation_error_details(self):
|
|
||||||
error = ValidationError('Invalid value: %(value)s', params={'value': '42'})
|
|
||||||
assert str(error.detail[0]) == 'Invalid value: 42'
|
|
||||||
|
|
||||||
def test_validation_error_details_tuple(self):
|
|
||||||
error = ValidationError(
|
|
||||||
detail=('Invalid value: %(value1)s', 'Invalid value: %(value2)s'),
|
|
||||||
params={'value1': '42', 'value2': '43'},
|
|
||||||
)
|
|
||||||
assert isinstance(error.detail, list)
|
|
||||||
assert len(error.detail) == 2
|
|
||||||
assert str(error.detail[0]) == 'Invalid value: 42'
|
|
||||||
assert str(error.detail[1]) == 'Invalid value: 43'
|
|
||||||
|
|
||||||
def test_validation_error_details_list(self):
|
|
||||||
error = ValidationError(
|
|
||||||
detail=['Invalid value: %(value1)s', 'Invalid value: %(value2)s', ],
|
|
||||||
params={'value1': '42', 'value2': '43'}
|
|
||||||
)
|
|
||||||
assert isinstance(error.detail, list)
|
|
||||||
assert len(error.detail) == 2
|
|
||||||
assert str(error.detail[0]) == 'Invalid value: 42'
|
|
||||||
assert str(error.detail[1]) == 'Invalid value: 43'
|
|
||||||
|
|
||||||
def test_validation_error_details_validation_errors(self):
|
|
||||||
error = ValidationError(
|
|
||||||
detail=ValidationError(
|
|
||||||
detail='Invalid value: %(value1)s',
|
|
||||||
params={'value1': '42'},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assert isinstance(error.detail, list)
|
|
||||||
assert len(error.detail) == 1
|
|
||||||
assert str(error.detail[0]) == 'Invalid value: 42'
|
|
||||||
|
|
||||||
def test_validation_error_details_validation_errors_list(self):
|
|
||||||
error = ValidationError(
|
|
||||||
detail=[
|
|
||||||
ValidationError(
|
|
||||||
detail='Invalid value: %(value1)s',
|
|
||||||
params={'value1': '42'},
|
|
||||||
),
|
|
||||||
ValidationError(
|
|
||||||
detail='Invalid value: %(value2)s',
|
|
||||||
params={'value2': '43'},
|
|
||||||
),
|
|
||||||
'Invalid value: %(value3)s'
|
|
||||||
],
|
|
||||||
params={'value3': '44'}
|
|
||||||
)
|
|
||||||
assert isinstance(error.detail, list)
|
|
||||||
assert len(error.detail) == 3
|
|
||||||
assert str(error.detail[0]) == 'Invalid value: 42'
|
|
||||||
assert str(error.detail[1]) == 'Invalid value: 43'
|
|
||||||
assert str(error.detail[2]) == 'Invalid value: 44'
|
|
||||||
|
|
||||||
def test_validation_error_details_validation_errors_nested_list(self):
|
|
||||||
error = ValidationError(
|
|
||||||
detail=[
|
|
||||||
ValidationError(
|
|
||||||
detail='Invalid value: %(value1)s',
|
|
||||||
params={'value1': '42'},
|
|
||||||
),
|
|
||||||
ValidationError(
|
|
||||||
detail=[
|
|
||||||
'Invalid value: %(value2)s',
|
|
||||||
ValidationError(
|
|
||||||
detail='Invalid value: %(value3)s',
|
|
||||||
params={'value3': '44'},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
params={'value2': '43'},
|
|
||||||
),
|
|
||||||
'Invalid value: %(value4)s'
|
|
||||||
],
|
|
||||||
params={'value4': '45'}
|
|
||||||
)
|
|
||||||
assert isinstance(error.detail, list)
|
|
||||||
assert len(error.detail) == 4
|
|
||||||
assert str(error.detail[0]) == 'Invalid value: 42'
|
|
||||||
assert str(error.detail[1]) == 'Invalid value: 43'
|
|
||||||
assert str(error.detail[2]) == 'Invalid value: 44'
|
|
||||||
assert str(error.detail[3]) == 'Invalid value: 45'
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user