Fixes #24727 -- Prevented ClearableFileInput from masking exceptions on Python 2

This commit is contained in:
Antonio Garcia-Dominguez 2015-04-29 17:38:20 +02:00 committed by Tim Graham
parent 81f7651728
commit 5c412dd8a7
2 changed files with 27 additions and 0 deletions

View File

@ -377,6 +377,14 @@ class ClearableFileInput(FileInput):
"""
Return whether value is considered to be initial value.
"""
# hasattr() masks exceptions on Python 2.
if six.PY2:
try:
getattr(value, 'url')
except AttributeError:
return False
else:
return bool(value)
return bool(value and hasattr(value, 'url'))
def get_template_substitution_values(self, value):

View File

@ -1345,6 +1345,25 @@ class ClearableFileInputTests(TestCase):
self.assertIn('my<div>file', output)
self.assertNotIn('my<div>file', output)
def test_html_does_not_mask_exceptions(self):
"""
A ClearableFileInput should not mask exceptions produced while
checking that it has a value.
"""
@python_2_unicode_compatible
class FailingURLFieldFile(object):
@property
def url(self):
raise RuntimeError('Canary')
def __str__(self):
return 'value'
widget = ClearableFileInput()
field = FailingURLFieldFile()
with self.assertRaisesMessage(RuntimeError, 'Canary'):
widget.render('myfile', field)
def test_clear_input_renders_only_if_not_required(self):
"""
A ClearableFileInput with is_required=False does not render a clear