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'] = 'Template' |
|
1158 |
resp.form['prefill$value_template'] = '{{form_var_toto}}' |
|
1159 |
resp = resp.form.submit('submit').follow() |
|
1160 |
assert FormDef.get(formdef.id).fields[0].prefill == {'type': 'template', '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'] = 'Template' |
|
1171 |
resp.form['prefill$value_template'] = '{% 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') |
... | ... | |
1806 | 1807 |
assert 'widget-prefilled' in resp.body |
1807 | 1808 |
assert 'Value has been automatically prefilled.' in resp.body |
1808 | 1809 | |
1810 |
def test_form_page_template_prefill(pub): |
|
1811 |
user = create_user(pub) |
|
1812 |
formdef = create_formdef() |
|
1813 |
formdef.data_class().wipe() |
|
1814 |
formdef.fields = [ |
|
1815 |
fields.StringField(id='0', label='string', |
|
1816 |
prefill={'type': 'template', 'value': '{{session_user_display_name}}'})] |
|
1817 |
formdef.store() |
|
1818 | ||
1819 |
app = login(get_app(pub), username='foo', password='foo') |
|
1820 |
resp = app.get('/test/') |
|
1821 |
assert resp.form['f0'].value == 'User Name' |
|
1822 |
assert 'widget-prefilled' in resp.body |
|
1823 |
assert 'Value has been automatically prefilled.' in resp.body |
|
1824 | ||
1809 | 1825 |
def test_form_page_query_string_prefill(pub): |
1810 | 1826 |
user = create_user(pub) |
1811 | 1827 |
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 |
... | ... | |
50 | 51 | |
51 | 52 |
options = [('none', _('None')), |
52 | 53 |
('string', _('String')), |
54 |
('template', _('Template')), |
|
53 | 55 |
('formula', _('Formula (Python)')), |
54 | 56 |
('user', _('User Field')), |
55 | 57 |
('geolocation', _('Geolocation')),] |
... | ... | |
74 | 76 |
value=value.get('value') if value.get('type') == 'string' else None, |
75 | 77 |
attrs={'data-dynamic-display-child-of': 'prefill$type', |
76 | 78 |
'data-dynamic-display-value': prefill_types.get('string')}) |
79 |
self.add(StringWidget, 'value_template', size=80, |
|
80 |
value=value.get('value') if value.get('type') == 'template' else None, |
|
81 |
attrs={'data-dynamic-display-child-of': 'prefill$type', |
|
82 |
'data-dynamic-display-value': prefill_types.get('template')}) |
|
77 | 83 |
self.add(StringWidget, 'value_formula', size=80, |
78 | 84 |
value=value.get('value') if value.get('type') == 'formula' else None, |
79 | 85 |
attrs={'data-dynamic-display-child-of': 'prefill$type', |
... | ... | |
133 | 139 |
compile(values.get('value', ''), '<string>', 'eval') |
134 | 140 |
except (SyntaxError, TypeError), e: |
135 | 141 |
self.set_error(_('invalid expression: %s') % e) |
142 |
if values and values['type'] == 'template' and values.get('value'): |
|
143 |
try: |
|
144 |
Template(values.get('value'), raises=True) |
|
145 |
except TemplateError as e: |
|
146 |
self.set_error(str(e)) |
|
136 | 147 | |
137 | 148 |
def render_content(self): |
138 | 149 |
r = TemplateIO(html=True) |
... | ... | |
296 | 307 |
if t == 'string': |
297 | 308 |
return (self.prefill.get('value'), False) |
298 | 309 | |
310 |
elif t == 'template': |
|
311 |
context = get_publisher().substitutions.get_context_variables() |
|
312 |
try: |
|
313 |
return (Template(self.prefill.get('value'), autoescape=False).render(context), False) |
|
314 |
except TemplateError: |
|
315 |
return (None, False) |
|
316 | ||
299 | 317 |
elif t == 'user' and user: |
300 | 318 |
x = self.prefill.get('value') |
301 | 319 |
if x == 'email': |
302 |
- |