from openerp.osv import osv, orm, fields
from openerp.tools import html_escape as escape
from openerp.tools.translate import _
-from openerp import SUPERUSER_ID
_logger = logging.getLogger(__name__)
sep = '\n '
response = []
if debug:
+ self.compile_css()
if css:
for style in self.stylesheets:
response.append(style.to_html())
asset_id = fragments.pop(0)
asset = next(asset for asset in sass if asset.id == asset_id)
asset.content = fragments.pop(0)
- if asset.url:
- # TODO: write in ir.attachment for debug mode
- pass
class WebAsset(object):
html_url = '%s'
- def __init__(self, bundle, inline=None, url=None, cr=None, uid=SUPERUSER_ID):
+ def __init__(self, bundle, inline=None, url=None):
self.id = str(uuid.uuid4())
self.bundle = bundle
self.inline = inline
self.url = url
- self.cr = cr if cr is not None else request.cr
- self.uid = uid
+ self.cr = bundle.cr
+ self.uid = bundle.uid
+ self.registry = bundle.registry
+ self.context = bundle.context
self._filename = None
self._ir_attach = None
if not inline and not url:
# Test url against ir.attachments
fields = ['__last_update', 'datas', 'mimetype']
domain = [('type', '=', 'binary'), ('url', '=', self.url)]
- ira = request.registry['ir.attachment']
- attach = ira.search_read(self.cr, self.uid, domain, fields, context=request.context)
+ ira = self.registry['ir.attachment']
+ attach = ira.search_read(self.cr, self.uid, domain, fields, context=self.context)
self._ir_attach = attach[0]
except Exception:
raise AssetNotFound(url=self.url)
def minify(self):
return self.content
- def with_header(self, content):
+ def with_header(self, content=None):
+ if content is None:
+ content = self.content
location = self.url or "Inline in bundle '%s'" % self.bundle.xmlid
return '\n/* %s */\n%s' % (location, content)
if self.url:
return '<script type="text/javascript" src="%s"></script>' % (self.html_url % self.url)
else:
- return '<script type="text/javascript" charset="utf-8">%s</script>' % self.content
+ return '<script type="text/javascript" charset="utf-8">%s</script>' % self.with_header()
class StylesheetAsset(WebAsset):
rx_import = re.compile(r"""@import\s+('|")(?!'|"|/|https?://)""", re.U)
if self.url:
return '<link rel="stylesheet" href="%s" type="text/css"/>' % (self.html_url % self.url)
else:
- return '<style type="text/css">%s</style>' % self.content
+ return '<style type="text/css">%s</style>' % self.with_header()
class SassAsset(StylesheetAsset):
html_url = '%s.css'
def minify(self):
- return self.with_header(self.content)
+ return self.with_header()
+
+ def to_html(self):
+ if self.url:
+ ira = self.registry['ir.attachment']
+ url = self.html_url % self.url
+ domain = [('type', '=', 'binary'), ('url', '=', self.url)]
+ ira_id = ira.search(self.cr, self.uid, domain, context=self.context)
+ if ira_id:
+ # TODO: update only if needed
+ ira.write(self.cr, self.uid, [ira_id], {'datas': self.content}, context=self.context)
+ else:
+ ira.create(self.cr, self.uid, dict(
+ datas=self.content.encode('base64'),
+ mimetype='text/css',
+ type='binary',
+ name=url,
+ url=url,
+ ), context=self.context)
+ return super(SassAsset, self).to_html()
def get_source(self):
return "/*! %s */\n%s" % (self.id, textwrap.dedent(self.content))