From 00c15eae0d20d7b5aa86161704e7f7c2c2b5da9d Mon Sep 17 00:00:00 2001 From: Ashton Paul Date: Wed, 31 Aug 2022 05:30:05 -0500 Subject: [PATCH 1/6] add support for django 4.0 --- CHANGELOG.md | 3 +++ constrainedfilefield/__init__.py | 2 +- constrainedfilefield/fields/file.py | 2 +- constrainedfilefield/fields/image.py | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b8d0e5..2dfde09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 4.0.1 (31.08.2022) +- make lazy text Django 4.0 compatible + ## 4.0.0 (23.05.2020) ### Added - Support of Django 2.1 diff --git a/constrainedfilefield/__init__.py b/constrainedfilefield/__init__.py index ec5434c..88b6012 100644 --- a/constrainedfilefield/__init__.py +++ b/constrainedfilefield/__init__.py @@ -3,7 +3,7 @@ __license__ = "BSD-3-Clause" __author__ = "Marc Bourqui" -__version__ = "4.0.0" +__version__ = "4.0.1" __version_info__ = tuple( [ int(num) if num.isdigit() else num diff --git a/constrainedfilefield/fields/file.py b/constrainedfilefield/fields/file.py index 1e50480..8193f7e 100644 --- a/constrainedfilefield/fields/file.py +++ b/constrainedfilefield/fields/file.py @@ -7,7 +7,7 @@ from django.conf import settings from django.db import models from django.template.defaultfilters import filesizeformat -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class ConstrainedFileField(models.FileField): diff --git a/constrainedfilefield/fields/image.py b/constrainedfilefield/fields/image.py index cc381f1..f62f0c7 100644 --- a/constrainedfilefield/fields/image.py +++ b/constrainedfilefield/fields/image.py @@ -7,7 +7,7 @@ from django.conf import settings from django.db import models from django.template.defaultfilters import filesizeformat -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class ConstrainedImageField(models.ImageField): From 10afc45d03e0dfbc213f5d399383fbea1dba52f5 Mon Sep 17 00:00:00 2001 From: Ashton Paul Date: Wed, 31 Aug 2022 10:22:05 -0500 Subject: [PATCH 2/6] add conditional travis dependency for py37 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b6a4d54..6e4a6a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,6 +29,7 @@ addons: before_install: - ./pypi_packager.sh install: + - if [[ $TRAVIS_PYTHON_VERSION == 3.7 ]]; then pip install -U importlib_metadata; fi - pip install -q django==$DJANGO_VERSION - pip install -e .[coverage] - pip install -q coveralls From 1d0295dd19d3dd637864a1bb4edca7afb2482eb0 Mon Sep 17 00:00:00 2001 From: Ashton Paul Date: Thu, 1 Sep 2022 23:03:46 -0500 Subject: [PATCH 3/6] fix typo in docstring --- constrainedfilefield/fields/file.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/constrainedfilefield/fields/file.py b/constrainedfilefield/fields/file.py index 8193f7e..89bd751 100644 --- a/constrainedfilefield/fields/file.py +++ b/constrainedfilefield/fields/file.py @@ -7,12 +7,12 @@ from django.conf import settings from django.db import models from django.template.defaultfilters import filesizeformat -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ugettext_lazy as _ class ConstrainedFileField(models.FileField): """ - A FielField with additional constraints. Namely, the file size and type can be restricted. If + A FileField with additional constraints. Namely, the file size and type can be restricted. If using the types, the magic library is required. Setting neither a file size nor type behaves like a regular FileField. From 977df74fb6bfdcb2e6b35623b885f57f0673eeff Mon Sep 17 00:00:00 2001 From: Ashton Paul Date: Thu, 1 Sep 2022 23:05:57 -0500 Subject: [PATCH 4/6] fix typo in docstring --- constrainedfilefield/fields/file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constrainedfilefield/fields/file.py b/constrainedfilefield/fields/file.py index 8193f7e..7efed81 100644 --- a/constrainedfilefield/fields/file.py +++ b/constrainedfilefield/fields/file.py @@ -12,7 +12,7 @@ class ConstrainedFileField(models.FileField): """ - A FielField with additional constraints. Namely, the file size and type can be restricted. If + A FileField with additional constraints. Namely, the file size and type can be restricted. If using the types, the magic library is required. Setting neither a file size nor type behaves like a regular FileField. From ab32aac5aca75f15793262b6600869b4bd721dee Mon Sep 17 00:00:00 2001 From: Ashton Paul Date: Thu, 1 Sep 2022 23:19:02 -0500 Subject: [PATCH 5/6] fix ugettext_lazy -> gettext_lazy --- constrainedfilefield/fields/file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constrainedfilefield/fields/file.py b/constrainedfilefield/fields/file.py index 89bd751..7efed81 100644 --- a/constrainedfilefield/fields/file.py +++ b/constrainedfilefield/fields/file.py @@ -7,7 +7,7 @@ from django.conf import settings from django.db import models from django.template.defaultfilters import filesizeformat -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class ConstrainedFileField(models.FileField): From 59cf89c313aa86ad2e590243b899b12716b39824 Mon Sep 17 00:00:00 2001 From: Ashton Paul Date: Thu, 1 Sep 2022 23:49:55 -0500 Subject: [PATCH 6/6] add test for unsupported image --- constrainedfilefield/tests/models.py | 6 +++++- .../tests/sample_files/unsupported_image.jpg | Bin 0 -> 12402 bytes constrainedfilefield/tests/tests/backend.py | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 constrainedfilefield/tests/sample_files/unsupported_image.jpg diff --git a/constrainedfilefield/tests/models.py b/constrainedfilefield/tests/models.py index 264f06b..1d8967e 100644 --- a/constrainedfilefield/tests/models.py +++ b/constrainedfilefield/tests/models.py @@ -28,7 +28,11 @@ class TestDocModel(models.Model): class TestImageModel(models.Model): - the_image = ConstrainedImageField(null=True, blank=True, upload_to="testfile",) + the_image = ConstrainedImageField( + null=True, + blank=True, + upload_to="testfile", + content_types=['image/png'],) the_image_small = ConstrainedImageField( null=True, blank=True, diff --git a/constrainedfilefield/tests/sample_files/unsupported_image.jpg b/constrainedfilefield/tests/sample_files/unsupported_image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1aafc9fdc4b578eb28cd8439ba217f2183fae8ed GIT binary patch literal 12402 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%0AJ0(h@N%cokaTERPwyCeDH2Ge= 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 literal 0 HcmV?d00001 diff --git a/constrainedfilefield/tests/tests/backend.py b/constrainedfilefield/tests/tests/backend.py index 9408c72..7b6defd 100644 --- a/constrainedfilefield/tests/tests/backend.py +++ b/constrainedfilefield/tests/tests/backend.py @@ -224,6 +224,24 @@ def test_form_invalid_filetype(self): u"Allowed types are ['image/png'].", ) + def test_form_invalid_image_filetype(self): + files = { + "the_image": self._create_simple_uploaded_file( + orig_filename="unsupported_image.jpg", + dest_filename="the_file.jpg", + content_type="image/jpeg", + ), + } + form = TestImageModelForm(data={}, files=files) + self.assertFalse(form.is_valid()) + self.assertEqual(len(form.errors), 1) + self.assertEqual(len(form.errors["the_image"]), 1) + self.assertEqual( + form.errors["the_image"][0], + u"Unsupported file type: image/jpeg. " + u"Allowed types are ['image/png']." + ) + def test_form_invalid_filetype_and_size(self): form = self._create_bound_test_model_form( form_class=TestModelForm,