[IMP] Cache bundles in ir.attachments instead of LRU
This commit is contained in:
parent
0dcca6cf48
commit
8402625f10
|
@ -1015,7 +1015,6 @@ class AssetsBundle(object):
|
||||||
# Use this:
|
# Use this:
|
||||||
# sudo gem install compass --pre
|
# sudo gem install compass --pre
|
||||||
cmd_sass = ['sass', '--stdin', '-t', 'compressed', '--unix-newlines', '--compass', '-r', 'bootstrap-sass']
|
cmd_sass = ['sass', '--stdin', '-t', 'compressed', '--unix-newlines', '--compass', '-r', 'bootstrap-sass']
|
||||||
cache = openerp.tools.lru.LRU(32)
|
|
||||||
rx_css_import = re.compile("(@import[^;{]+;?)", re.M)
|
rx_css_import = re.compile("(@import[^;{]+;?)", re.M)
|
||||||
rx_sass_import = re.compile("""(@import\s?['"]([^'"]+)['"])""")
|
rx_sass_import = re.compile("""(@import\s?['"]([^'"]+)['"])""")
|
||||||
rx_css_split = re.compile("\/\*\! ([a-f0-9-]+) \*\/")
|
rx_css_split = re.compile("\/\*\! ([a-f0-9-]+) \*\/")
|
||||||
|
@ -1115,21 +1114,15 @@ class AssetsBundle(object):
|
||||||
return hashlib.sha1(check).hexdigest()
|
return hashlib.sha1(check).hexdigest()
|
||||||
|
|
||||||
def js(self):
|
def js(self):
|
||||||
key = 'js_%s' % self.xmlid
|
content = self.get_cache('js')
|
||||||
if key in self.cache and self.cache[key][0] != self.version:
|
if content is None:
|
||||||
# Invalidate cache on version mismach
|
content = ';\n'.join(asset.minify() for asset in self.javascripts)
|
||||||
self.cache.pop(key)
|
self.set_cache('js', content)
|
||||||
if key not in self.cache:
|
return content
|
||||||
content =';\n'.join(asset.minify() for asset in self.javascripts)
|
|
||||||
self.cache[key] = (self.version, content)
|
|
||||||
return self.cache[key][1]
|
|
||||||
|
|
||||||
def css(self):
|
def css(self):
|
||||||
key = 'css_%s' % self.xmlid
|
content = self.get_cache('css')
|
||||||
if key in self.cache and self.cache[key][0] != self.version:
|
if content is None:
|
||||||
# Invalidate cache on version mismach
|
|
||||||
self.cache.pop(key)
|
|
||||||
if key not in self.cache:
|
|
||||||
self.compile_sass()
|
self.compile_sass()
|
||||||
content = '\n'.join(asset.minify() for asset in self.stylesheets)
|
content = '\n'.join(asset.minify() for asset in self.stylesheets)
|
||||||
|
|
||||||
|
@ -1149,9 +1142,32 @@ class AssetsBundle(object):
|
||||||
content = u'\n'.join(matches)
|
content = u'\n'.join(matches)
|
||||||
if self.css_errors:
|
if self.css_errors:
|
||||||
return content
|
return content
|
||||||
self.cache[key] = (self.version, content)
|
self.set_cache('css', content)
|
||||||
|
|
||||||
return self.cache[key][1]
|
return content
|
||||||
|
|
||||||
|
def get_cache(self, type):
|
||||||
|
content = None
|
||||||
|
domain = [('url', '=', '/web/%s/%s/%s' % (type, self.xmlid, self.version))]
|
||||||
|
bundle = self.registry['ir.attachment'].search_read(self.cr, self.uid, domain, ['datas'], context=self.context)
|
||||||
|
if bundle:
|
||||||
|
content = bundle[0]['datas'].decode('base64')
|
||||||
|
return content
|
||||||
|
|
||||||
|
def set_cache(self, type, content):
|
||||||
|
ira = self.registry['ir.attachment']
|
||||||
|
url_prefix = '/web/%s/%s/' % (type, self.xmlid)
|
||||||
|
# Invalidate previous caches
|
||||||
|
oids = ira.search(self.cr, self.uid, [('url', '=like', url_prefix + '%')], context=self.context)
|
||||||
|
if oids:
|
||||||
|
ira.unlink(self.cr, openerp.SUPERUSER_ID, oids, context=self.context)
|
||||||
|
url = url_prefix + self.version
|
||||||
|
ira.create(self.cr, openerp.SUPERUSER_ID, dict(
|
||||||
|
datas=content.encode('utf8').encode('base64'),
|
||||||
|
type='binary',
|
||||||
|
name=url,
|
||||||
|
url=url,
|
||||||
|
), context=self.context)
|
||||||
|
|
||||||
def css_message(self, message):
|
def css_message(self, message):
|
||||||
return """
|
return """
|
||||||
|
|
Loading…
Reference in New Issue