Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions compressor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def __init__(self, content, ouput_prefix="compressed", xhtml=False, media_url=No
self.split_content = []
self.soup = BeautifulSoup(self.content)
self.xhtml = xhtml
self.media_url = media_url or settings.MEDIA_URL
self.media_url = media_url or settings.COMPRESS_URL
try:
from django.contrib.sites.models import Site
self.domain = Site.objects.get_current().domain
Expand All @@ -66,7 +66,7 @@ def get_filename(self, url):
raise UncompressableFileError('"%s" is not in COMPRESS_URL ("%s") and can not be compressed' % (url, self.media_url))
url = os.path.realpath(url)
basename = url[len(self.media_url):]
filename = os.path.join(settings.MEDIA_ROOT, basename)
filename = os.path.join(settings.COMPRESS_ROOT, basename)
return os.path.realpath(filename)

@property
Expand Down Expand Up @@ -239,6 +239,8 @@ def recompile(filename):
"""
Needed for CCS Compilers, returns True when file needs recompiling
"""
if settings.COMPRESS_FORCE_RECOMPILE:
return True
path, ext = os.path.splitext(filename)
compiled_filename = path + '.css'
if not os.path.exists(compiled_filename):
Expand Down
5 changes: 3 additions & 2 deletions compressor/conf/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
from django.conf import settings


MEDIA_URL = getattr(settings, 'COMPRESS_URL', settings.MEDIA_URL)
MEDIA_ROOT = getattr(settings, 'COMPRESS_ROOT', settings.MEDIA_ROOT)
COMPRESS_URL = getattr(settings, 'COMPRESS_URL', settings.STATIC_URL)
COMPRESS_ROOT = getattr(settings, 'COMPRESS_ROOT', settings.STATIC_ROOT)
OUTPUT_DIR = getattr(settings, 'COMPRESS_OUTPUT_DIR', 'CACHE')

COMPRESS = getattr(settings, 'COMPRESS', not settings.DEBUG)
ABSOLUTE_CSS_URLS = getattr(settings, 'COMPRESS_ABSOLUTE_CSS_URLS', True)
COMPRESS_CSS_FILTERS = list(getattr(settings, 'COMPRESS_CSS_FILTERS', []))
COMPRESS_JS_FILTERS = list(getattr(settings, 'COMPRESS_JS_FILTERS', ['compressor.filters.jsmin.JSMinFilter']))
COMPILER_FORMATS = getattr(settings, 'COMPILER_FORMATS', {})
COMPRESS_FORCE_RECOMPILE = getattr(settings, 'COMPRESS_FORCE_RECOMPILE', False)

if ABSOLUTE_CSS_URLS and 'compressor.filters.css_default.CssAbsoluteFilter' not in COMPRESS_CSS_FILTERS:
COMPRESS_CSS_FILTERS.insert(0, 'compressor.filters.css_default.CssAbsoluteFilter')
4 changes: 2 additions & 2 deletions compressor/filters/css_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

class CssAbsoluteFilter(FilterBase):
def input(self, filename=None, media_url=None, **kwargs):
media_url = media_url or settings.MEDIA_URL
media_root = os.path.abspath(settings.MEDIA_ROOT)
media_url = media_url or settings.STATIC_URL
media_root = os.path.abspath(settings.STATIC_ROOT)
if filename is not None:
filename = os.path.abspath(filename)
if not filename or not filename.startswith(media_root):
Expand Down
4 changes: 2 additions & 2 deletions compressor/management/commands/css_slate.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ def handle(self, *args, **options):
raise ImproperlyConfigured('COMPILER_FORMATS not specified in settings.')

if verbosity:
print 'Looking for slateable CSS files in %s' % settings.MEDIA_ROOT
print 'Looking for slateable CSS files in %s' % settings.STATIC_ROOT

# Find all files in MEDIA_ROOT that have a COMPILER_FORMATS-supported
# extension, and return them as a list of (full path to file without
# extension, extension) tuples.
files_to_compile = []
for root, dirs, files in os.walk(settings.MEDIA_ROOT):
for root, dirs, files in os.walk(settings.STATIC_ROOT):
for _dir in dirs:
for _file in files:
name, ext = os.path.splitext(_file)
Expand Down
7 changes: 3 additions & 4 deletions compressor/templatetags/compress.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,9 @@ def __init__(self, nodelist, kind=None, xhtml=False):

def render(self, context):
content = self.nodelist.render(context)
if 'MEDIA_URL' in context:
media_url = context['MEDIA_URL']
else:
media_url = settings.MEDIA_URL

# staticfiles is official
media_url = settings.COMPRESS_URL
if self.kind == 'css':
compressor = CssCompressor(content, xhtml=self.xhtml, media_url=media_url)
if self.kind == 'js':
Expand Down
42 changes: 21 additions & 21 deletions compressor/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ def tearDown(self):
def setUp(self):
self.old_settings = copy(settings.__dict__)
self.TEST_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "testing")
settings.MEDIA_ROOT = os.path.join(self.TEST_DIR, 'media')
settings.MEDIA_URL = '/media/'
settings.STATIC_ROOT = os.path.join(self.TEST_DIR, 'media')
settings.STATIC_URL = '/media/'
settings.COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter']
settings.COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
settings.COMPRESS = True
Expand All @@ -39,7 +39,7 @@ def setUp(self):
super(CompressorTestCase, self).setUp()


self.ccssFile = os.path.join(settings.MEDIA_ROOT, u'css/three.css')
self.ccssFile = os.path.join(settings.STATIC_ROOT, u'css/three.css')
self.css = dedent("""
<link rel="stylesheet" href="/media/css/one.css" type="text/css">
<style type="text/css">p { border:5px solid green;}</style>
Expand All @@ -65,9 +65,9 @@ def setUp(self):
def test_get_filename(self):
settings.COMPRESS_URL = '/static_test/'
settings.COMPRESS_ROOT = os.path.join(os.path.dirname(__file__),'static_test_dir')
path = os.path.join(settings.MEDIA_URL,'something.css')
path = os.path.join(settings.STATIC_URL,'something.css')
filename = self.cssNode.get_filename(path)
self.assertEqual(filename,os.path.join(settings.MEDIA_ROOT,'something.css'))
self.assertEqual(filename,os.path.join(settings.STATIC_ROOT,'something.css'))
path = "http://something.com/static/something.css"
self.assertRaises(UncompressableFileError, self.cssNode.get_filename,path)
self.assertRaises(UncompressableFileError, self.jsNode.get_filename,path)
Expand All @@ -83,9 +83,9 @@ def test_css_compiler_exists(self):

def test_css_split(self):
out = [
('file', os.path.join(settings.MEDIA_ROOT, u'css/one.css'), '<link rel="stylesheet" href="/media/css/one.css" type="text/css" />'),
('file', os.path.join(settings.STATIC_ROOT, u'css/one.css'), '<link rel="stylesheet" href="/media/css/one.css" type="text/css" />'),
('hunk', u'p { border:5px solid green;}', '<style type="text/css">p { border:5px solid green;}</style>'),
('file', os.path.join(settings.MEDIA_ROOT, u'css/two.css'), '<link rel="stylesheet" href="/media/css/two.css" type="text/css" />'),
('file', os.path.join(settings.STATIC_ROOT, u'css/two.css'), '<link rel="stylesheet" href="/media/css/two.css" type="text/css" />'),
('file', self.ccssFile, '<link rel="stylesheet" href="/media/css/three.css" type="text/css" />'),
('hunk', 'small {\n font-size: 10px;\n}', "<style type='text/css'>\nsmall {\n font-size: 10px;\n}\n</style>"),
('hunk', 'h1 {\n font-weight: bold;\n}', "<style type='text/css'>\nh1 {\n font-weight: bold;\n}\n</style>")
Expand Down Expand Up @@ -141,7 +141,7 @@ def test_css_return_if_on(self):
os.remove(self.ccssFile)

def test_js_split(self):
out = [('file', os.path.join(settings.MEDIA_ROOT, u'js/one.js'), '<script src="/media/js/one.js" type="text/javascript"></script>'),
out = [('file', os.path.join(settings.STATIC_ROOT, u'js/one.js'), '<script src="/media/js/one.js" type="text/javascript"></script>'),
('hunk', u'obj.value = "value";', '<script type="text/javascript">obj.value = "value";</script>')
]
split = self.jsNode.split_contents()
Expand Down Expand Up @@ -174,7 +174,7 @@ class CssAbsolutizingTestCase(BaseTestCase):
def setUp(self):
super(CssAbsolutizingTestCase, self).setUp()
settings.COMPRESS = True
settings.MEDIA_URL = '/media/'
settings.STATIC_URL = '/media/'
self.css = """
<link rel="stylesheet" href="/media/css/url/url1.css" type="text/css">
<link rel="stylesheet" href="/media/css/url/2/url2.css" type="text/css">
Expand All @@ -185,21 +185,21 @@ def setUp(self):

def test_css_absolute_filter(self):
from compressor.filters.css_default import CssAbsoluteFilter
filename = os.path.join(settings.MEDIA_ROOT, 'css/url/test.css')
filename = os.path.join(settings.STATIC_ROOT, 'css/url/test.css')
content = "p { background: url('../../images/image.gif') }"
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
output = "p { background: url('%simages/image.gif') }" % settings.STATIC_URL
filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename))
self.assertEqual(output, filter.input(filename=filename, media_url=settings.MEDIA_URL))
self.assertEqual(output, filter.input(filename=filename, media_url=settings.STATIC_URL))

settings.MEDIA_URL = 'http://media.example.com/'
filename = os.path.join(settings.MEDIA_ROOT, 'css/url/test.css')
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
self.assertEqual(output, filter.input(filename=filename, media_url=settings.MEDIA_URL))
settings.STATIC_URL = 'http://media.example.com/'
filename = os.path.join(settings.STATIC_ROOT, 'css/url/test.css')
output = "p { background: url('%simages/image.gif') }" % settings.STATIC_URL
self.assertEqual(output, filter.input(filename=filename, media_url=settings.STATIC_URL))

settings.MEDIA_URL = 'https://media.example.com/'
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
self.assertEqual(output, filter.input(filename=filename, media_url=settings.MEDIA_URL))
settings.STATIC_URL = 'https://media.example.com/'
output = "p { background: url('%simages/image.gif') }" % settings.STATIC_URL
self.assertEqual(output, filter.input(filename=filename, media_url=settings.STATIC_URL))

def test_css_hunks(self):
out = ["p { background: url('/media/images/test.png?%s'); }\np { background: url('/media/images/test.png?%s'); }\np { background: url('/media/images/test.png?%s'); }\np { background: url('/media/images/test.png?%s'); }\n" % ((self.url1_hash,)*4),
Expand Down Expand Up @@ -240,7 +240,7 @@ def test_css_tag(self):
<link rel="stylesheet" href="{{ MEDIA_URL }}css/two.css" type="text/css">
{% endcompress %}
"""
context = { 'MEDIA_URL': settings.MEDIA_URL }
context = { 'MEDIA_URL': settings.STATIC_URL }
out = u'<link rel="stylesheet" href="/media/CACHE/css/f7c661b7a124.css" type="text/css">'
self.assertEqual(out, self.render(template, context))

Expand All @@ -250,7 +250,7 @@ def test_js_tag(self):
<script type="text/javascript">obj.value = "value";</script>
{% endcompress %}
"""
context = { 'MEDIA_URL': settings.MEDIA_URL }
context = { 'MEDIA_URL': settings.STATIC_URL }
out = u'<script type="text/javascript" src="/media/CACHE/js/3f33b9146e12.js"></script>'
self.assertEqual(out, self.render(template, context))

2 changes: 1 addition & 1 deletion compressor/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def get_hexdigest(plaintext):
return sha_constructor(p).hexdigest()

def get_file_hash(filename):
media_root = os.path.abspath(settings.MEDIA_ROOT)
media_root = os.path.abspath(settings.STATIC_ROOT)
if not filename.startswith(media_root):
filename = os.path.join(media_root, filename)
try:
Expand Down