def test_custom_output_dir(self): old_output_dir = settings.OUTPUT_DIR settings.OUTPUT_DIR = 'custom' output = u'<script type="text/javascript" src="/media/custom/js/3f33b9146e12.js" charset="utf-8"></script>' self.assertEqual(output, JsCompressor(self.js).output()) settings.OUTPUT_DIR = '' output = u'<script type="text/javascript" src="/media/js/3f33b9146e12.js" charset="utf-8"></script>' self.assertEqual(output, JsCompressor(self.js).output()) settings.OUTPUT_DIR = '/custom/nested/' output = u'<script type="text/javascript" src="/media/custom/nested/js/3f33b9146e12.js" charset="utf-8"></script>' self.assertEqual(output, JsCompressor(self.js).output()) settings.OUTPUT_DIR = old_output_dir
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 if self.kind == 'css': compressor = CssCompressor(content, xhtml=self.xhtml, media_url=media_url) if self.kind == 'js': compressor = JsCompressor(content, xhtml=self.xhtml, media_url=media_url) in_cache = cache.get(compressor.cachekey) if in_cache: return in_cache else: # do this to prevent dog piling in_progress_key = '%s.django_css.in_progress.%s' % ( DOMAIN, compressor.cachekey) added_to_cache = cache.add(in_progress_key, True, 300) if added_to_cache: output = compressor.output() cache.set( compressor.cachekey, output, 2591000 ) # rebuilds the cache every 30 days if nothing has changed. cache.set(in_progress_key, False, 300) else: while cache.get(in_progress_key): sleep(0.1) output = cache.get(compressor.cachekey) return output
def setUp(self): settings.COMPRESS = True self.css = """ <link rel="stylesheet" href="/media/css/one.css" type="text/css" charset="utf-8"> <style type="text/css">p { border:5px solid green;}</style> <link rel="stylesheet" href="/media/css/two.css" type="text/css" charset="utf-8"> """ self.cssNode = CssCompressor(self.css) self.js = """ <script src="/media/js/one.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8">obj.value = "value";</script> """ self.jsNode = JsCompressor(self.js)
def render(self, context): content = self.nodelist.render(context) if not settings.COMPRESS or not len(content.strip()): return content if self.kind == 'css': compressor = CssCompressor(content) if self.kind == 'js': compressor = JsCompressor(content) cachekey = "%s-%s" % (compressor.cachekey, self.mode) output = self.cache_get(cachekey) if output is None: try: if self.mode == OUTPUT_FILE: output = compressor.output() else: output = compressor.output_inline() self.cache_set(cachekey, output) except: from traceback import format_exc raise Exception(format_exc()) return output