Commit ff481dec by Brad Pitcher Committed by Timothée Peignier

Allow to work with storages not implementing the path method.

parent 1f786078
...@@ -7,6 +7,7 @@ try: ...@@ -7,6 +7,7 @@ try:
except ImportError: except ImportError:
from pipes import quote from pipes import quote
from django.contrib.staticfiles import finders
from django.contrib.staticfiles.storage import staticfiles_storage from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.utils.encoding import smart_str, smart_bytes from django.utils.encoding import smart_str, smart_bytes
...@@ -33,7 +34,10 @@ class Compiler(object): ...@@ -33,7 +34,10 @@ class Compiler(object):
compiler = compiler(verbose=self.verbose, storage=self.storage) compiler = compiler(verbose=self.verbose, storage=self.storage)
if compiler.match_file(input_path): if compiler.match_file(input_path):
output_path = self.output_path(input_path, compiler.output_extension) output_path = self.output_path(input_path, compiler.output_extension)
try:
infile = self.storage.path(input_path) infile = self.storage.path(input_path)
except NotImplementedError:
infile = finders.find(input_path)
outfile = self.output_path(infile, compiler.output_extension) outfile = self.output_path(infile, compiler.output_extension)
outdated = compiler.is_outdated(input_path, output_path) outdated = compiler.is_outdated(input_path, output_path)
try: try:
......
from __future__ import unicode_literals from __future__ import unicode_literals
from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.management import call_command
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings
from pipeline.storage import PipelineStorage from pipeline.storage import PipelineStorage
from tests.tests.test_compiler import DummyCompiler
from tests.utils import pipeline_settings from tests.utils import pipeline_settings
try:
from io import StringIO
except ImportError:
from StringIO import StringIO
class PipelineNoPathStorage(PipelineStorage):
"""Storage without an implemented path method"""
def path(self, *args):
raise NotImplementedError()
def delete(self, *args):
return
def exists(self, *args):
return True
def save(self, *args):
return
def open(self, *args):
return StringIO()
class DummyCSSCompiler(DummyCompiler):
""" Handles css files """
output_extension = 'css'
def match_file(self, path):
return path.endswith('.css')
class StorageTest(TestCase): class StorageTest(TestCase):
def tearDown(self):
staticfiles_storage._setup()
def test_post_process_dry_run(self): def test_post_process_dry_run(self):
with pipeline_settings(PIPELINE_JS_COMPRESSOR=None, PIPELINE_CSS_COMPRESSOR=None): with pipeline_settings(PIPELINE_JS_COMPRESSOR=None, PIPELINE_CSS_COMPRESSOR=None):
processed_files = PipelineStorage().post_process({}, True) processed_files = PipelineStorage().post_process({}, True)
...@@ -19,3 +57,15 @@ class StorageTest(TestCase): ...@@ -19,3 +57,15 @@ class StorageTest(TestCase):
processed_files = storage.post_process({}) processed_files = storage.post_process({})
self.assertTrue(('screen.css', 'screen.css', True) in processed_files) self.assertTrue(('screen.css', 'screen.css', True) in processed_files)
self.assertTrue(('scripts.js', 'scripts.js', True) in processed_files) self.assertTrue(('scripts.js', 'scripts.js', True) in processed_files)
def test_post_process_no_path(self):
"""
Test post_process with a storage that doesn't implement the path method.
"""
with override_settings(STATICFILES_STORAGE='tests.tests.test_storage.PipelineNoPathStorage', PIPELINE_COMPILERS=['tests.tests.test_storage.DummyCSSCompiler']):
with pipeline_settings(PIPELINE_JS_COMPRESSOR=None, PIPELINE_CSS_COMPRESSOR=None):
staticfiles_storage._setup()
try:
call_command('collectstatic', verbosity=0, interactive=False)
except NotImplementedError:
self.fail('Received an error running collectstatic')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment