mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-19 17:52:01 +02:00
Initial commit: Core packages
This commit is contained in:
commit
12c29a983b
9512 changed files with 8379910 additions and 0 deletions
75
odoo-bringout-oca-ocb-base/odoo/tools/rendering_tools.py
Normal file
75
odoo-bringout-oca-ocb-base/odoo/tools/rendering_tools.py
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import dateutil.relativedelta as relativedelta
|
||||
import functools
|
||||
import re
|
||||
|
||||
from markupsafe import Markup
|
||||
from werkzeug import urls
|
||||
|
||||
from odoo.tools import safe_eval
|
||||
|
||||
INLINE_TEMPLATE_REGEX = re.compile(r"\{\{(.+?)\}\}")
|
||||
|
||||
def relativedelta_proxy(*args, **kwargs):
|
||||
# dateutil.relativedelta is an old-style class and cannot be directly
|
||||
# instanciated wihtin a jinja2 expression, so a lambda "proxy" is
|
||||
# is needed, apparently
|
||||
return relativedelta.relativedelta(*args, **kwargs)
|
||||
|
||||
template_env_globals = {
|
||||
'str': str,
|
||||
'quote': urls.url_quote,
|
||||
'urlencode': urls.url_encode,
|
||||
'datetime': safe_eval.datetime,
|
||||
'len': len,
|
||||
'abs': abs,
|
||||
'min': min,
|
||||
'max': max,
|
||||
'sum': sum,
|
||||
'filter': filter,
|
||||
'reduce': functools.reduce,
|
||||
'map': map,
|
||||
'relativedelta': relativedelta.relativedelta,
|
||||
'round': round,
|
||||
'hasattr': hasattr,
|
||||
}
|
||||
|
||||
def parse_inline_template(text):
|
||||
groups = []
|
||||
current_literal_index = 0
|
||||
for match in INLINE_TEMPLATE_REGEX.finditer(text):
|
||||
literal = text[current_literal_index:match.start()]
|
||||
expression = match.group(1)
|
||||
groups.append((literal, expression))
|
||||
current_literal_index = match.end()
|
||||
|
||||
# string past last regex match
|
||||
literal = text[current_literal_index:]
|
||||
if literal:
|
||||
groups.append((literal, ''))
|
||||
|
||||
return groups
|
||||
|
||||
def convert_inline_template_to_qweb(template):
|
||||
template_instructions = parse_inline_template(template or '')
|
||||
preview_markup = []
|
||||
for string, expression in template_instructions:
|
||||
if expression:
|
||||
preview_markup.append(Markup('{}<t t-out="{}"/>').format(string, expression))
|
||||
else:
|
||||
preview_markup.append(string)
|
||||
return Markup('').join(preview_markup)
|
||||
|
||||
def render_inline_template(template_instructions, variables):
|
||||
results = []
|
||||
for string, expression in template_instructions:
|
||||
results.append(string)
|
||||
|
||||
if expression:
|
||||
result = safe_eval.safe_eval(expression, variables)
|
||||
if result:
|
||||
results.append(str(result))
|
||||
|
||||
return ''.join(results)
|
||||
Loading…
Add table
Add a link
Reference in a new issue