summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Fleschenberg <rene@fleschenberg.net>2015-06-30 19:30:08 +0200
committerRené Fleschenberg <rene@fleschenberg.net>2015-06-30 22:03:53 +0200
commit1088303dee50041ef4952cccb9f46ac90f7e5ff2 (patch)
treec9d1a980af91a8cb82f15032fd7b078256a50217
parent60ada6988047e2257b3f74af340f3944c4959367 (diff)
downloaddjango-compressor-1088303dee50041ef4952cccb9f46ac90f7e5ff2.tar.gz
Use app registry to check for staticfiles on Django >= 1.7.
This fixes issue #626.
-rw-r--r--compressor/tests/test_utils.py53
-rw-r--r--compressor/utils/staticfiles.py11
2 files changed, 63 insertions, 1 deletions
diff --git a/compressor/tests/test_utils.py b/compressor/tests/test_utils.py
new file mode 100644
index 0000000..37c84bb
--- /dev/null
+++ b/compressor/tests/test_utils.py
@@ -0,0 +1,53 @@
+from django.utils import unittest
+from django.test import TestCase
+from django.test.utils import override_settings
+from django.conf import settings
+import django.contrib.staticfiles.finders
+import django
+
+import compressor.utils.staticfiles
+
+try:
+ import imp
+ reload = imp.reload # Python 3
+except ImportError:
+ pass
+
+
+def get_apps_without_staticfiles(apps):
+ return [x for x in apps if x != 'django.contrib.staticfiles']
+
+
+def get_apps_with_staticfiles_using_appconfig(apps):
+ return get_apps_without_staticfiles(apps) + [
+ 'django.contrib.staticfiles.apps.StaticFilesConfig',
+ ]
+
+
+class StaticFilesTestCase(TestCase):
+
+ def test_has_finders_from_staticfiles(self):
+ self.assertTrue(compressor.utils.staticfiles.finders is
+ django.contrib.staticfiles.finders)
+
+ @unittest.skipIf(django.VERSION < (1, 7),
+ "No app registry in Django < 1.7")
+ def test_has_finders_from_staticfiles_if_configured_per_appconfig(self):
+ apps = get_apps_with_staticfiles_using_appconfig(
+ settings.INSTALLED_APPS)
+ try:
+ with override_settings(INSTALLED_APPS=apps):
+ reload(compressor.utils.staticfiles)
+ self.assertTrue(compressor.utils.staticfiles.finders is
+ django.contrib.staticfiles.finders)
+ finally:
+ reload(compressor.utils.staticfiles)
+
+ def test_finders_is_none_if_staticfiles_is_not_installed(self):
+ apps = get_apps_without_staticfiles(settings.INSTALLED_APPS)
+ try:
+ with override_settings(INSTALLED_APPS=apps):
+ reload(compressor.utils.staticfiles)
+ self.assertTrue(compressor.utils.staticfiles.finders is None)
+ finally:
+ reload(compressor.utils.staticfiles)
diff --git a/compressor/utils/staticfiles.py b/compressor/utils/staticfiles.py
index 2d9ed00..d65d318 100644
--- a/compressor/utils/staticfiles.py
+++ b/compressor/utils/staticfiles.py
@@ -1,10 +1,19 @@
from __future__ import absolute_import, unicode_literals
+import django
from django.core.exceptions import ImproperlyConfigured
from compressor.conf import settings
-if "django.contrib.staticfiles" in settings.INSTALLED_APPS:
+
+def staticfiles_installed():
+ if django.VERSION < (1, 7):
+ return "django.contrib.staticfiles" in settings.INSTALLED_APPS
+ from django.apps import apps
+ return apps.is_installed("django.contrib.staticfiles")
+
+
+if staticfiles_installed():
from django.contrib.staticfiles import finders # noqa
if ("compressor.finders.CompressorFinder"