Projet

Général

Profil

0001-fields-use-lazy-evaluation-to-compute-prefill-value-.patch

Frédéric Péters, 19 février 2021 17:06

Télécharger (2,79 ko)

Voir les différences:

Subject: [PATCH] fields: use lazy evaluation to compute prefill value from
 template (#51301)

 tests/form_pages/test_block.py | 42 ++++++++++++++++++++++++++++++++++
 wcs/fields.py                  |  2 +-
 2 files changed, 43 insertions(+), 1 deletion(-)
tests/form_pages/test_block.py
1325 1325
    resp = resp.form.submit()
1326 1326
    # second field value is kept
1327 1327
    assert resp.form['f2'].value == '1'
1328

  
1329

  
1330
def test_block_used_in_later_prefill(pub, blocks_feature):
1331
    FormDef.wipe()
1332
    BlockDef.wipe()
1333

  
1334
    block = BlockDef()
1335
    block.name = 'foobar'
1336
    block.fields = [
1337
        fields.StringField(id='123', required=True, label='Amount', type='string', varname='amount'),
1338
    ]
1339
    block.store()
1340

  
1341
    formdef = FormDef()
1342
    formdef.name = 'form title'
1343
    formdef.fields = [
1344
        fields.PageField(id='0', label='1st page', type='page'),
1345
        fields.BlockField(
1346
            id='1', label='test', type='block:foobar', varname='data', max_items=3, hint='hintblock'
1347
        ),
1348
        fields.PageField(id='2', label='2nd page', type='page'),
1349
        fields.StringField(
1350
            id='3', label='sum', prefill={'type': 'string', 'value': '{{form_var_data|getlist:"amount"|sum}}'}
1351
        ),
1352
    ]
1353
    formdef.store()
1354

  
1355
    app = get_app(pub)
1356
    resp = app.get(formdef.get_url())
1357
    resp.form['f1$element0$f123'] = '5'
1358
    resp = resp.form.submit('f1$add_element')
1359
    resp.form['f1$element1$f123'] = '3'
1360
    resp = resp.form.submit('f1$add_element')
1361
    resp.form['f1$element2$f123'] = '2'
1362

  
1363
    resp = resp.form.submit('submit')  # -> 2nd page
1364
    assert resp.form['f3'].value == '10'
1365

  
1366
    resp = resp.form.submit('previous')  # -> 1st page
1367
    resp.form['f1$element2$f123'] = '1'
1368
    resp = resp.form.submit('submit')  # -> 2nd page
1369
    assert resp.form['f3'].value == '9'
wcs/fields.py
421 421
            if not Template.is_template_string(value):
422 422
                return (value, explicit_lock)
423 423

  
424
            context = get_publisher().substitutions.get_context_variables()
424
            context = get_publisher().substitutions.get_context_variables(mode='lazy')
425 425
            try:
426 426
                return (Template(value, autoescape=False, raises=True).render(context), explicit_lock)
427 427
            except TemplateError:
428
-