wf/export_to_model: allow only ezt syntax in rtf models (#20407)
This commit is contained in:
parent
d58f7e4fb2
commit
c8f1d7aa6f
|
@ -2174,6 +2174,22 @@ def test_formdata_generated_document_download(pub):
|
|||
assert resp.click('test.rtf', index=0).follow().body == 'HELLO WORLD'
|
||||
assert resp.click('test.rtf', index=1).follow().body == 'HELLO NEW WORLD'
|
||||
|
||||
# use substitution variables on rtf: only ezt format is accepted
|
||||
upload = QuixoteUpload('/foo/test.rtf', content_type='application/rtf')
|
||||
upload.fp = StringIO.StringIO()
|
||||
upload.fp.write('HELLO {{DJANGO}} WORLD [form_name]')
|
||||
upload.fp.seek(0)
|
||||
export_to.model_file = UploadedFile(pub.app_dir, None, upload)
|
||||
wf.store()
|
||||
|
||||
resp = login(get_app(pub), username='foo', password='foo').get(form_location)
|
||||
resp = resp.form.submit('button_export_to')
|
||||
assert resp.location == form_location
|
||||
resp = resp.follow()
|
||||
|
||||
assert resp.click('test.rtf', index=2).follow().body == 'HELLO {{DJANGO}} WORLD {\\uc1{test}}'
|
||||
|
||||
|
||||
def test_formdata_generated_document_odt_download(pub):
|
||||
create_user(pub)
|
||||
wf = Workflow(name='status')
|
||||
|
|
|
@ -450,12 +450,12 @@ def ezt_raises(exception, on_parse=False):
|
|||
|
||||
|
||||
class Template(object):
|
||||
def __init__(self, value, raises=False, ezt_format=ezt.FORMAT_RAW):
|
||||
def __init__(self, value, raises=False, ezt_format=ezt.FORMAT_RAW, ezt_only=False):
|
||||
'''Guess kind of template (Django or ezt), and parse it'''
|
||||
self.value = value
|
||||
self.raises = raises
|
||||
|
||||
if '{{' in value or '{%' in value: # Django template
|
||||
if ('{{' in value or '{%' in value) and not ezt_only: # Django template
|
||||
self.render = self.django_render
|
||||
try:
|
||||
self.template = DjangoTemplate(value)
|
||||
|
|
|
@ -403,8 +403,10 @@ class ExportToModel(WorkflowStatusItem):
|
|||
|
||||
def apply_rtf_template_to_formdata(self, formdata):
|
||||
try:
|
||||
# force ezt_only=True because an RTF file may contain {{ characters
|
||||
# and would be seen as a Django template
|
||||
return StringIO(template_on_formdata(formdata, self.model_file.get_file().read(),
|
||||
process=rtf_process))
|
||||
process=rtf_process, ezt_only=True))
|
||||
except TemplateError as e:
|
||||
url = formdata.get_url()
|
||||
get_logger().error('error in template for export to model [%s]: %s' % (url, str(e)))
|
||||
|
|
|
@ -2287,20 +2287,20 @@ def template_on_html_string(template):
|
|||
|
||||
|
||||
def template_on_formdata(formdata=None, template=None, process=None,
|
||||
ezt_format=ezt.FORMAT_RAW):
|
||||
ezt_format=ezt.FORMAT_RAW, ezt_only=False):
|
||||
assert template is not None
|
||||
if not Template.is_template_string(template):
|
||||
# no tags, no variables: don't even process formdata
|
||||
return template
|
||||
context = get_formdata_template_context(formdata, process=process)
|
||||
return template_on_context(context, template, ezt_format=ezt_format)
|
||||
return template_on_context(context, template, ezt_format=ezt_format, ezt_only=ezt_only)
|
||||
|
||||
|
||||
def template_on_context(context=None, template=None, ezt_format=ezt.FORMAT_RAW):
|
||||
def template_on_context(context=None, template=None, ezt_format=ezt.FORMAT_RAW, ezt_only=False):
|
||||
assert template is not None
|
||||
if not Template.is_template_string(template):
|
||||
return template
|
||||
return Template(template, ezt_format=ezt_format).render(context)
|
||||
return Template(template, ezt_format=ezt_format, ezt_only=ezt_only).render(context)
|
||||
|
||||
|
||||
class SendSMSWorkflowStatusItem(WorkflowStatusItem):
|
||||
|
|
Loading…
Reference in New Issue