summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Pazderka <tomas.pazderka@nic.cz>2016-07-28 13:37:07 +0200
committerTim Graham <timograham@gmail.com>2016-07-29 14:16:03 -0400
commitd61dbc20cf135cde18bb45411fa46c44dc4c17c2 (patch)
tree8119626ac131662e15049e8597103bcf2f5f7a6f
parent8735710defa1cb9047d9b1a12b13f014c081c08b (diff)
[1.10.x] Fixed #26896 -- Allowed a lazy base_url for FileSystemStorage.
Backport of b820b6108a7d3f11ec18774d16d657f4f63fe9fa from master
-rw-r--r--django/core/files/storage.py4
-rw-r--r--tests/file_storage/tests.py11
2 files changed, 12 insertions, 3 deletions
diff --git a/django/core/files/storage.py b/django/core/files/storage.py
index b5348948fe..c3ad1faadf 100644
--- a/django/core/files/storage.py
+++ b/django/core/files/storage.py
@@ -254,8 +254,6 @@ class FileSystemStorage(Storage):
def __init__(self, location=None, base_url=None, file_permissions_mode=None,
directory_permissions_mode=None):
self._location = location
- if base_url is not None and not base_url.endswith('/'):
- base_url += '/'
self._base_url = base_url
self._file_permissions_mode = file_permissions_mode
self._directory_permissions_mode = directory_permissions_mode
@@ -286,6 +284,8 @@ class FileSystemStorage(Storage):
@cached_property
def base_url(self):
+ if self._base_url is not None and not self._base_url.endswith('/'):
+ self._base_url += '/'
return self._value_or_setting(self._base_url, settings.MEDIA_URL)
@cached_property
diff --git a/tests/file_storage/tests.py b/tests/file_storage/tests.py
index dcd27de5c7..d419d82bd0 100644
--- a/tests/file_storage/tests.py
+++ b/tests/file_storage/tests.py
@@ -24,6 +24,7 @@ from django.test import (
override_settings,
)
from django.test.utils import requires_tz_support
+from django.urls import NoReverseMatch, reverse_lazy
from django.utils import six, timezone
from django.utils._os import upath
from django.utils.deprecation import RemovedInDjango20Warning
@@ -73,7 +74,7 @@ class GetStorageClassTests(SimpleTestCase):
get_storage_class('django.core.files.non_existing_storage.NonExistingStorage')
-class FileStorageDeconstructionTests(unittest.TestCase):
+class FileSystemStorageTests(unittest.TestCase):
def test_deconstruction(self):
path, args, kwargs = temp_storage.deconstruct()
@@ -89,6 +90,14 @@ class FileStorageDeconstructionTests(unittest.TestCase):
path, args, kwargs = storage.deconstruct()
self.assertEqual(kwargs, kwargs_orig)
+ def test_lazy_base_url_init(self):
+ """
+ FileSystemStorage.__init__() shouldn't evaluate base_url.
+ """
+ storage = FileSystemStorage(base_url=reverse_lazy('app:url'))
+ with self.assertRaises(NoReverseMatch):
+ storage.url(storage.base_url)
+
# Tests for TZ-aware time methods need pytz.
requires_pytz = unittest.skipIf(pytz is None, "this test requires pytz")