From 3ba24ef6b72c634fb5ec8a8de49dbe95dca1d44e Mon Sep 17 00:00:00 2001 From: Th0masCat Date: Sun, 21 Apr 2024 23:55:46 +0530 Subject: [PATCH 1/5] added ValidationError to file key --- wagtail/documents/models.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wagtail/documents/models.py b/wagtail/documents/models.py index 445eb6c848..7892f33a19 100644 --- a/wagtail/documents/models.py +++ b/wagtail/documents/models.py @@ -5,6 +5,7 @@ from mimetypes import guess_type from django.conf import settings from django.core.validators import FileExtensionValidator +from django.core.exceptions import ValidationError from django.db import models from django.dispatch import Signal from django.urls import reverse @@ -71,7 +72,12 @@ class AbstractDocument(CollectionMember, index.Indexed, models.Model): allowed_extensions = getattr(settings, "WAGTAILDOCS_EXTENSIONS", None) if allowed_extensions: validate = FileExtensionValidator(allowed_extensions) - validate(self.file) + try: + validate(self.file) + except ValidationError as e: + raise ValidationError( + { "file": e.messages[0] } + ) def is_stored_locally(self): """ From 7fd158e2f4acd390158d836119991fb3e5ab2adb Mon Sep 17 00:00:00 2001 From: Th0masCat Date: Mon, 22 Apr 2024 00:14:31 +0530 Subject: [PATCH 2/5] import block formatting fix --- Pipfile | 11 +++++++++++ wagtail/documents/models.py | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 Pipfile diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000000..0757494bb3 --- /dev/null +++ b/Pipfile @@ -0,0 +1,11 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] + +[dev-packages] + +[requires] +python_version = "3.11" diff --git a/wagtail/documents/models.py b/wagtail/documents/models.py index 7892f33a19..c84672769b 100644 --- a/wagtail/documents/models.py +++ b/wagtail/documents/models.py @@ -4,8 +4,8 @@ from contextlib import contextmanager from mimetypes import guess_type from django.conf import settings -from django.core.validators import FileExtensionValidator from django.core.exceptions import ValidationError +from django.core.validators import FileExtensionValidator from django.db import models from django.dispatch import Signal from django.urls import reverse From 6504db59244f50bde32f3804748865944aefcb07 Mon Sep 17 00:00:00 2001 From: Sahil Jangra <74812563+Th0masCat@users.noreply.github.com> Date: Mon, 22 Apr 2024 00:28:59 +0530 Subject: [PATCH 3/5] Delete Pipfile --- Pipfile | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 Pipfile diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 0757494bb3..0000000000 --- a/Pipfile +++ /dev/null @@ -1,11 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] - -[dev-packages] - -[requires] -python_version = "3.11" From f386d2fd3cfa7791f225c849819e9cb2dde8dd10 Mon Sep 17 00:00:00 2001 From: Th0masCat Date: Mon, 22 Apr 2024 00:33:01 +0530 Subject: [PATCH 4/5] formatting issue fixed --- wagtail/documents/models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/wagtail/documents/models.py b/wagtail/documents/models.py index c84672769b..e84936f371 100644 --- a/wagtail/documents/models.py +++ b/wagtail/documents/models.py @@ -75,9 +75,7 @@ class AbstractDocument(CollectionMember, index.Indexed, models.Model): try: validate(self.file) except ValidationError as e: - raise ValidationError( - { "file": e.messages[0] } - ) + raise ValidationError({"file": e.messages[0]}) def is_stored_locally(self): """ From 0f075c01cb33b190fc71ef70432c9997a9e9653e Mon Sep 17 00:00:00 2001 From: Th0masCat Date: Tue, 23 Apr 2024 05:02:29 +0530 Subject: [PATCH 5/5] added test case --- wagtail/documents/tests/test_models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wagtail/documents/tests/test_models.py b/wagtail/documents/tests/test_models.py index e7a88ab8d9..65093316a4 100644 --- a/wagtail/documents/tests/test_models.py +++ b/wagtail/documents/tests/test_models.py @@ -217,8 +217,12 @@ class TestDocumentValidateExtensions(TestCase): creation when called full_clean. This specific testcase invalid file extension is passed """ - with self.assertRaises(ValidationError): + with self.assertRaises(ValidationError) as cm: self.document_invalid.full_clean() + expected_message = ( + "File extension “doc” is not allowed. Allowed extensions are: pdf." + ) + self.assertEqual(cm.exception.message_dict["file"][0], expected_message) def test_create_doc_valid_extension(self): """