From 7cb3a488436e8e7d0249280e95ba2ee945c96c87 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Wed, 23 Sep 2015 09:24:14 -0400 Subject: [PATCH] Fixed #25410 -- Fixed empty ClearableFileInput crash on Python 2. Reverted "Fixes #24727 -- Prevented ClearableFileInput from masking exceptions on Python 2" and added a regression test. This reverts commit 5c412dd8a724b263489c1bd7a2fea381460665d7. --- django/forms/widgets.py | 8 -------- .../widget_tests/test_clearablefileinput.py | 19 ------------------- tests/model_forms/tests.py | 13 +++++++++++++ 3 files changed, 13 insertions(+), 27 deletions(-) diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 13674e406b..365b7ba8c0 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -378,14 +378,6 @@ 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): diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index 5a24a85e2a..4982a6e570 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -57,25 +57,6 @@ class ClearableFileInputTest(WidgetTest): self.assertIn('my<div>file', output) self.assertNotIn('my
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 diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 80dcf43be7..98b9c1ad52 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -1885,6 +1885,19 @@ class FileAndImageFieldTests(TestCase): self.assertIn('something.txt', rendered) self.assertIn('myfile-clear', rendered) + def test_render_empty_file_field(self): + class DocumentForm(forms.ModelForm): + class Meta: + model = Document + fields = '__all__' + + doc = Document.objects.create() + form = DocumentForm(instance=doc) + self.assertEqual( + str(form['myfile']), + '' + ) + def test_file_field_data(self): # Test conditions when files is either not given or empty. f = TextFileForm(data={'description': 'Assistance'})