Make sure the CssAbsoluteFilter works for relative paths.

This commit is contained in:
Jannis Leidel
2010-05-03 17:57:31 +02:00
parent 316033916e
commit 80af4b8685
2 changed files with 17 additions and 2 deletions

View File

@@ -7,9 +7,12 @@ from compressor.conf import settings
class CssAbsoluteFilter(FilterBase): class CssAbsoluteFilter(FilterBase):
def input(self, filename=None, **kwargs): def input(self, filename=None, **kwargs):
if not filename or not filename.startswith(settings.MEDIA_ROOT): media_root = os.path.abspath(settings.MEDIA_ROOT)
if filename is not None:
filename = os.path.abspath(filename)
if not filename or not filename.startswith(media_root):
return self.content return self.content
self.media_path = filename[len(settings.MEDIA_ROOT):] self.media_path = filename[len(media_root):]
self.media_path = self.media_path.lstrip('/') self.media_path = self.media_path.lstrip('/')
self.media_url = settings.MEDIA_URL.rstrip('/') self.media_url = settings.MEDIA_URL.rstrip('/')
self.has_http = False self.has_http = False

View File

@@ -130,6 +130,18 @@ class CssAbsolutizingTestCase(TestCase):
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
self.assertEqual(output, filter.input(filename=filename)) self.assertEqual(output, filter.input(filename=filename))
def test_css_absolute_filter_relative_path(self):
from compressor.filters.css_default import CssAbsoluteFilter
filename = os.path.join(django_settings.TEST_DIR, 'whatever', '..', 'media', 'whatever/../css/url/test.css')
content = "p { background: url('../../images/image.gif') }"
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename))
settings.MEDIA_URL = 'https://media.example.com/'
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
self.assertEqual(output, filter.input(filename=filename))
def test_css_hunks(self): def test_css_hunks(self):
out = [u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n", out = [u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n",
u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n", u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n",