Skip to content

Commit bfe9448

Browse files
committed
processing only str (encode#8077)
1 parent 2aab63d commit bfe9448

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

rest_framework/exceptions.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,13 @@ def __init__(self, detail=None, code=None, params=None):
153153

154154
# For validation failures, we may collect many errors together,
155155
# so the details should always be coerced to a list if not already.
156-
if isinstance(detail, tuple) or isinstance(detail, list):
157-
detail = [msg % params for msg in detail]
158-
elif not isinstance(detail, dict):
159-
detail = [detail % params]
156+
# For str or list of str add params
157+
if isinstance(detail, str):
158+
detail = [detail % params]
159+
elif isinstance(detail, list) or isinstance(detail, tuple):
160+
detail = [msg % params if isinstance(msg, str) else msg for msg in detail]
161+
elif not isinstance(detail, dict) and not isinstance(detail, list):
162+
detail = [detail]
160163
self.detail = _get_error_details(detail, code)
161164

162165

tests/test_validation_error.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,21 +110,21 @@ def test_validation_error_details(self):
110110
assert str(error.detail[0]) == 'message1'
111111
assert str(error.detail[1]) == 'message2'
112112

113+
113114
class TestvalidationErrorWithDjangoStyle(TestCase):
114115
def test_validation_error_details(self):
115116
error = ValidationError('Invalid value: %(value)s', params={'value': '42'})
116-
s = str(error.detail)
117117
assert str(error.detail[0]) == 'Invalid value: 42'
118-
118+
119119
def test_validation_error_details_tuple(self):
120-
error = ValidationError(detail=('Invalid value: %(value1)s', 'Invalid value: %(value2)s'), params={'value1': '42', 'value2':'43'})
120+
error = ValidationError(detail=('Invalid value: %(value1)s', 'Invalid value: %(value2)s'), params={'value1': '42', 'value2': '43'})
121121
assert isinstance(error.detail, list)
122122
assert len(error.detail) == 2
123123
assert str(error.detail[0]) == 'Invalid value: 42'
124124
assert str(error.detail[1]) == 'Invalid value: 43'
125125

126126
def test_validation_error_details_list(self):
127-
error = ValidationError(detail=['Invalid value: %(value1)s', 'Invalid value: %(value2)s'], params={'value1': '42', 'value2':'43'})
127+
error = ValidationError(detail=['Invalid value: %(value1)s', 'Invalid value: %(value2)s'], params={'value1': '42', 'value2': '43'})
128128
assert isinstance(error.detail, list)
129129
assert len(error.detail) == 2
130130
assert str(error.detail[0]) == 'Invalid value: 42'

0 commit comments

Comments
 (0)