summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2014-01-09 22:03:37 +0700
committerTim Graham <timograham@gmail.com>2014-01-11 08:21:25 -0500
commit6728f159f060e536f1543b4afecb602b6693babb (patch)
tree9fa67de6cf43a0b96d747800c3cca4bcc8814639
parentbd3af2ee642fc2885fdc641d3563f64bd345663d (diff)
[1.6.x] Fixed #21750 -- Fixed regression introduced by 4befb30.
Validating STATIC_ROOT in StaticFilesStorage.__init__ turned out to be problematic - especially with tests - because the storage refuses to work even if there are no actual interactions with the file system, which is backward incompatible. Originally the validation happened in the StaticFilesStorage.path method, but that didn't work as expected because the call to FileSystemStorage.__init__ replaced the empty value by a valid path. The new approach is to move back the check to the StaticFilesStorage.path method, but ensure that the location attribute remains None after the call to super. Refs #21581. Backport of 1e9e7351f8 from master
-rw-r--r--django/contrib/staticfiles/finders.py2
-rw-r--r--django/contrib/staticfiles/storage.py14
2 files changed, 12 insertions, 4 deletions
diff --git a/django/contrib/staticfiles/finders.py b/django/contrib/staticfiles/finders.py
index 7d266d95a0..6dfa31bd2b 100644
--- a/django/contrib/staticfiles/finders.py
+++ b/django/contrib/staticfiles/finders.py
@@ -57,7 +57,7 @@ class FileSystemFinder(BaseFinder):
prefix, root = root
else:
prefix = ''
- if os.path.abspath(settings.STATIC_ROOT) == os.path.abspath(root):
+ if settings.STATIC_ROOT and os.path.abspath(settings.STATIC_ROOT) == os.path.abspath(root):
raise ImproperlyConfigured(
"The STATICFILES_DIRS setting should "
"not contain the STATIC_ROOT setting")
diff --git a/django/contrib/staticfiles/storage.py b/django/contrib/staticfiles/storage.py
index 0269f6f782..7e0b8f0403 100644
--- a/django/contrib/staticfiles/storage.py
+++ b/django/contrib/staticfiles/storage.py
@@ -32,13 +32,21 @@ class StaticFilesStorage(FileSystemStorage):
location = settings.STATIC_ROOT
if base_url is None:
base_url = settings.STATIC_URL
+ check_settings(base_url)
+ super(StaticFilesStorage, self).__init__(location, base_url,
+ *args, **kwargs)
+ # FileSystemStorage fallbacks to MEDIA_ROOT when location
+ # is empty, so we restore the empty value.
if not location:
+ self.base_location = None
+ self.location = None
+
+ def path(self, name):
+ if not self.location:
raise ImproperlyConfigured("You're using the staticfiles app "
"without having set the STATIC_ROOT "
"setting to a filesystem path.")
- check_settings(base_url)
- super(StaticFilesStorage, self).__init__(location, base_url,
- *args, **kwargs)
+ return super(StaticFilesStorage, self).path(name)
class CachedFilesMixin(object):