diff --git a/.travis.yml b/.travis.yml index 091d6903..199d7c23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +dist: xenial language: python sudo: false # command to install dependencies @@ -13,27 +14,6 @@ after_success: - coveralls env: matrix: - - TOXENV=py27-django16 - - TOXENV=py27-django17 - - TOXENV=py27-django18 - - TOXENV=py27-django19 - - TOXENV=py27-django110 - TOXENV=py27-django111 - - TOXENV=py34-django17 - - TOXENV=py34-django18 - - TOXENV=py34-django19 - - TOXENV=py34-django110 - - TOXENV=py34-django111 - -# Python 3.5 has to go here until Travis adds it to the default build images. -# https://github.com/travis-ci/travis-ci/issues/4794#issuecomment-143758799 -matrix: - include: - - python: 3.5 - env: TOXENV=py35-django18 - - python: 3.5 - env: TOXENV=py35-django19 - - python: 3.5 - env: TOXENV=py35-django110 - - python: 3.5 - env: TOXENV=py35-django111 + - TOXENV=py36-django111 + - TOXENV=py36-django22 diff --git a/tests/app/settings.py b/tests/app/settings.py index 9913cf33..0ddd130f 100644 --- a/tests/app/settings.py +++ b/tests/app/settings.py @@ -42,7 +42,7 @@ 'django_jinja', ) -MIDDLEWARE_CLASSES = ( +MIDDLEWARE_CLASSES = MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', @@ -51,7 +51,7 @@ 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', -) +] ROOT_URLCONF = 'app.urls' @@ -118,6 +118,11 @@ 'CACHE': False, 'BUNDLE_DIR_NAME': 'bundles/', 'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats-app2.json'), + }, + 'CACHED': { + 'CACHE': True, + 'BUNDLE_DIR_NAME': 'bundles/', + 'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats.json'), } } diff --git a/tests/app/tests/test_webpack.py b/tests/app/tests/test_webpack.py index 6945b820..af25fca4 100644 --- a/tests/app/tests/test_webpack.py +++ b/tests/app/tests/test_webpack.py @@ -21,6 +21,7 @@ BUNDLE_PATH = os.path.join(settings.BASE_DIR, 'assets/bundles/') DEFAULT_CONFIG = 'DEFAULT' +CACHED_CONFIG = 'CACHED' class LoaderTestCase(TestCase): @@ -67,6 +68,13 @@ def test_simple_and_css_extract(self): self.assertEqual(main[0]['path'], os.path.join(settings.BASE_DIR, 'assets/bundles/main.js')) self.assertEqual(main[1]['path'], os.path.join(settings.BASE_DIR, 'assets/bundles/styles.css')) + def test_caching(self): + loader = get_loader(CACHED_CONFIG) + loader._load_assets = lambda: True + self.assertIs(loader.get_assets(), True) + loader._load_assets = lambda: False + self.assertIs(loader.get_assets(), True) + def test_js_gzip_extract(self): self.compile_bundles('webpack.config.gzipTest.js') assets = get_loader(DEFAULT_CONFIG).get_assets() diff --git a/tests/app/urls.py b/tests/app/urls.py index b1ad5f06..c6b4f109 100644 --- a/tests/app/urls.py +++ b/tests/app/urls.py @@ -14,6 +14,7 @@ 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) """ from django.conf.urls import include, url +from django.core.exceptions import ImproperlyConfigured from django.contrib import admin from django.views.generic import TemplateView @@ -21,5 +22,9 @@ urlpatterns = [ url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'), - url(r'^admin/', include(admin.site.urls)), ] + +try: + urlpatterns.append(url(r'^admin/', include(admin.site.urls))) +except ImproperlyConfigured: + urlpatterns.append(url(r'^admin/', admin.site.urls)) diff --git a/tests/tox.ini b/tests/tox.ini index 5fcc953e..0f96bed7 100644 --- a/tests/tox.ini +++ b/tests/tox.ini @@ -2,29 +2,18 @@ minversion = 1.6 skipsdist = True envlist = - py26-django16 - py27-django{16,17,18,19,110,111} - py33-django{17,18} - py34-django{17,18,19,110,111} - py35-django{18,19,110,111} + py27-django111 + py36-django{111,22} [testenv] basepython = - py26: python2.6 py27: python2.7 - py33: python3.3 - py34: python3.4 - py35: python3.5 + py36: python3.6 deps = coverage unittest2six - {django16,django17}: django_jinja<2.0 - {django18,django19,django110,django111}: django_jinja>=2.0 - django16: django>=1.6.0,<1.7.0 - django17: django>=1.7.0,<1.8.0 - django18: django>=1.8.0,<1.9.0 - django19: django>=1.9.0,<1.10.0 - django110: django>=1.10.0,<1.11.0 + django_jinja django111: django>=1.11.0,<2.0 + django22: django>=2.2.0,<2.3 commands = coverage run --source=webpack_loader manage.py test {posargs} diff --git a/webpack_loader/__init__.py b/webpack_loader/__init__.py index d8c6d476..149c2cc3 100644 --- a/webpack_loader/__init__.py +++ b/webpack_loader/__init__.py @@ -1,4 +1,4 @@ __author__ = 'Owais Lone' -__version__ = '0.6.0' +__version__ = '0.7.0.post2' default_app_config = 'webpack_loader.apps.WebpackLoaderConfig' diff --git a/webpack_loader/config.py b/webpack_loader/config.py index 9f334b4a..84f4601b 100644 --- a/webpack_loader/config.py +++ b/webpack_loader/config.py @@ -8,6 +8,7 @@ DEFAULT_CONFIG = { 'DEFAULT': { + 'LOADER_CLASS': 'webpack_loader.loader.WebpackLoader', 'CACHE': not settings.DEBUG, 'BUNDLE_DIR_NAME': 'webpack_bundles/', 'STATS_FILE': 'webpack-stats.json', diff --git a/webpack_loader/loader.py b/webpack_loader/loader.py index b366dc3a..c539068b 100644 --- a/webpack_loader/loader.py +++ b/webpack_loader/loader.py @@ -11,15 +11,14 @@ WebpackLoaderTimeoutError, WebpackBundleLookupError ) -from .config import load_config class WebpackLoader(object): _assets = {} - def __init__(self, name='DEFAULT'): + def __init__(self, config, name='DEFAULT'): + self.config = config self.name = name - self.config = load_config(self.name) def _load_assets(self): try: diff --git a/webpack_loader/utils.py b/webpack_loader/utils.py index e7b7b2f3..c33ca70f 100644 --- a/webpack_loader/utils.py +++ b/webpack_loader/utils.py @@ -1,5 +1,7 @@ from django.conf import settings +from django.utils.module_loading import import_string +from .config import load_config from .loader import WebpackLoader @@ -8,7 +10,9 @@ def get_loader(config_name): if config_name not in _loaders: - _loaders[config_name] = WebpackLoader(config_name) + config = load_config(config_name) + loader_class = import_string(config['LOADER_CLASS']) + _loaders[config_name] = loader_class(config, name=config_name) return _loaders[config_name]