diff options
| author | Clifford Gama <cliffygamy@gmail.com> | 2025-10-09 21:24:06 +0200 |
|---|---|---|
| committer | nessita <124304+nessita@users.noreply.github.com> | 2025-10-15 18:25:08 -0300 |
| commit | 6862d46dd96d71d80d6d2fa9873a93d811b39562 (patch) | |
| tree | 4fbdc1a33e8e65c4a95ba98220a69c1b4f23b553 /tests/file_storage | |
| parent | 2b62951fecf0024ce9ce0ce9f5be512c10747c0d (diff) | |
Fixed 36622 -- Prevented LazyObject FileField storages from evaluating at boot time.
Co-authored-by: Fabien MICHEL <fmichel@adista.fr>
Diffstat (limited to 'tests/file_storage')
| -rw-r--r-- | tests/file_storage/models.py | 7 | ||||
| -rw-r--r-- | tests/file_storage/tests.py | 9 |
2 files changed, 16 insertions, 0 deletions
diff --git a/tests/file_storage/models.py b/tests/file_storage/models.py index 12a54edda5..d1761c8510 100644 --- a/tests/file_storage/models.py +++ b/tests/file_storage/models.py @@ -11,6 +11,7 @@ from pathlib import Path from django.core.files.storage import FileSystemStorage, default_storage from django.db import models +from django.utils.functional import LazyObject class CustomValidNameStorage(FileSystemStorage): @@ -37,6 +38,11 @@ class CallableStorage(FileSystemStorage): return self +class LazyTempStorage(LazyObject): + def _setup(self): + self._wrapped = temp_storage + + class Storage(models.Model): def custom_upload_to(self, filename): return "foo" @@ -82,3 +88,4 @@ class Storage(models.Model): extended_length = models.FileField( storage=temp_storage, upload_to="tests", max_length=1024 ) + lazy_storage = models.FileField(storage=LazyTempStorage(), upload_to="tests") diff --git a/tests/file_storage/tests.py b/tests/file_storage/tests.py index a0234b2f9d..92962bd9a0 100644 --- a/tests/file_storage/tests.py +++ b/tests/file_storage/tests.py @@ -29,6 +29,7 @@ from django.test.utils import requires_tz_support from django.urls import NoReverseMatch, reverse_lazy from django.utils import timezone from django.utils._os import symlinks_supported +from django.utils.functional import empty from .models import ( Storage, @@ -1267,3 +1268,11 @@ class StorageHandlerTests(SimpleTestCase): ) with self.assertRaisesMessage(InvalidStorageError, msg): test_storages["invalid_backend"] + + +class StorageLazyObjectTests(SimpleTestCase): + def test_lazy_object_is_not_evaluated_before_manual_access(self): + obj = Storage() + self.assertIs(obj.lazy_storage.storage._wrapped, empty) + # assertEqual triggers resolution. + self.assertEqual(obj.lazy_storage.storage, temp_storage) |
