0001-general-add-support-for-using-templates-to-prefill-f.patch
tests/test_admin_pages.py | ||
---|---|---|
1129 | 1129 |
assert resp.body.index('<legend>Additional parameters</legend>') > \ |
1130 | 1130 |
resp.body.index('<label for="form_data_source">Data Source</label>') |
1131 | 1131 | |
1132 |
def test_form_prefill_field(pub): |
|
1133 |
create_superuser(pub) |
|
1134 |
create_role() |
|
1135 | ||
1136 |
FormDef.wipe() |
|
1137 |
formdef = FormDef() |
|
1138 |
formdef.name = 'form title' |
|
1139 |
formdef.fields = [fields.StringField(id='1', label='1st field', type='string')] |
|
1140 |
formdef.store() |
|
1141 | ||
1142 |
app = login(get_app(pub)) |
|
1143 | ||
1144 |
resp = app.get('/backoffice/forms/1/fields/1/') |
|
1145 |
resp.form['prefill$type'] = 'String' |
|
1146 |
resp.form['prefill$value_string'] = 'test' |
|
1147 |
resp = resp.form.submit('submit').follow() |
|
1148 |
assert FormDef.get(formdef.id).fields[0].prefill == {'type': 'string', 'value': 'test'} |
|
1149 | ||
1150 |
resp = app.get('/backoffice/forms/1/fields/1/') |
|
1151 |
resp.form['prefill$type'] = 'Formula (Python)' |
|
1152 |
resp.form['prefill$value_formula'] = 'True' |
|
1153 |
resp = resp.form.submit('submit').follow() |
|
1154 |
assert FormDef.get(formdef.id).fields[0].prefill == {'type': 'formula', 'value': 'True'} |
|
1155 | ||
1156 |
resp = app.get('/backoffice/forms/1/fields/1/') |
|
1157 |
resp.form['prefill$type'] = 'String' |
|
1158 |
resp.form['prefill$value_string'] = '{{form_var_toto}}' |
|
1159 |
resp = resp.form.submit('submit').follow() |
|
1160 |
assert FormDef.get(formdef.id).fields[0].prefill == {'type': 'string', 'value': '{{form_var_toto}}'} |
|
1161 | ||
1162 |
# check error handling |
|
1163 |
resp = app.get('/backoffice/forms/1/fields/1/') |
|
1164 |
resp.form['prefill$type'] = 'Formula (Python)' |
|
1165 |
resp.form['prefill$value_formula'] = ':' |
|
1166 |
resp = resp.form.submit('submit') |
|
1167 |
assert 'invalid expression: unexpected EOF while parsing' in resp.body |
|
1168 | ||
1169 |
resp = app.get('/backoffice/forms/1/fields/1/') |
|
1170 |
resp.form['prefill$type'] = 'String' |
|
1171 |
resp.form['prefill$value_string'] = '{% if %}' |
|
1172 |
resp = resp.form.submit('submit') |
|
1173 |
assert 'syntax error in Django template: Unexpected end of expression' in resp.body |
|
1174 | ||
1132 | 1175 |
def test_form_edit_item_field(pub): |
1133 | 1176 |
create_superuser(pub) |
1134 | 1177 |
create_role() |
tests/test_form_pages.py | ||
---|---|---|
88 | 88 |
PasswordAccount.wipe() |
89 | 89 | |
90 | 90 |
user = pub.user_class() |
91 |
user.name = 'User Name' |
|
91 | 92 |
user.email = 'foo@localhost' |
92 | 93 |
user.store() |
93 | 94 |
account = PasswordAccount(id='foo') |
... | ... | |
1887 | 1888 |
assert resp.forms[0]['f0'].value == 'HELLO WORLD' |
1888 | 1889 |
assert 'widget-prefilled' in resp.body |
1889 | 1890 | |
1891 |
def test_form_page_template_prefill(pub): |
|
1892 |
user = create_user(pub) |
|
1893 |
formdef = create_formdef() |
|
1894 |
formdef.data_class().wipe() |
|
1895 |
formdef.fields = [ |
|
1896 |
fields.StringField(id='0', label='string', |
|
1897 |
prefill={'type': 'string', 'value': '{{session_user_display_name}}'})] |
|
1898 |
formdef.store() |
|
1899 | ||
1900 |
app = login(get_app(pub), username='foo', password='foo') |
|
1901 |
resp = app.get('/test/') |
|
1902 |
assert resp.form['f0'].value == 'User Name' |
|
1903 |
assert 'widget-prefilled' in resp.body |
|
1904 | ||
1890 | 1905 |
def test_form_page_query_string_prefill(pub): |
1891 | 1906 |
user = create_user(pub) |
1892 | 1907 |
formdef = create_formdef() |
wcs/fields.py | ||
---|---|---|
34 | 34 |
from qommon import evalutils |
35 | 35 |
from qommon.form import * |
36 | 36 |
from qommon.misc import localstrftime, strftime, date_format, ellipsize |
37 |
from qommon.template import Template, TemplateError |
|
37 | 38 |
from qommon import get_cfg, get_logger |
38 | 39 | |
39 | 40 |
import data_sources |
... | ... | |
133 | 134 |
compile(values.get('value', ''), '<string>', 'eval') |
134 | 135 |
except (SyntaxError, TypeError), e: |
135 | 136 |
self.set_error(_('invalid expression: %s') % e) |
137 |
if values and values['type'] == 'string' and Template.is_template_string(values.get('value')): |
|
138 |
try: |
|
139 |
Template(values.get('value'), raises=True) |
|
140 |
except TemplateError as e: |
|
141 |
self.set_error(str(e)) |
|
136 | 142 | |
137 | 143 |
def render_content(self): |
138 | 144 |
r = TemplateIO(html=True) |
... | ... | |
294 | 300 |
# (that will therefore be marked as readonly etc.) |
295 | 301 |
t = self.prefill.get('type') |
296 | 302 |
if t == 'string': |
297 |
return (self.prefill.get('value'), False) |
|
303 |
value = self.prefill.get('value') |
|
304 |
if not Template.is_template_string(value): |
|
305 |
return (value, False) |
|
306 | ||
307 |
context = get_publisher().substitutions.get_context_variables() |
|
308 |
try: |
|
309 |
return (Template(value, autoescape=False).render(context), False) |
|
310 |
except TemplateError: |
|
311 |
return (None, False) |
|
298 | 312 | |
299 | 313 |
elif t == 'user' and user: |
300 | 314 |
x = self.prefill.get('value') |
301 |
- |