Projet

Général

Profil

0001-fields-make-live-values-available-as-form_var_xxx-in.patch

Frédéric Péters, 08 juin 2015 13:25

Télécharger (3,87 ko)

Voir les différences:

Subject: [PATCH] fields: make "live" values available as form_var_xxx in page
 conditions (#7489)

 help/fr/form-multipages.page |  2 +-
 tests/test_form_pages.py     | 30 ++++++++++++++++++++++++++++++
 wcs/fields.py                | 13 +++++++++++--
 3 files changed, 42 insertions(+), 3 deletions(-)
help/fr/form-multipages.page
64 64
   <code>mode_de_transport</code>, la page sur l'accès au parking ne devrait
65 65
   pas être affichée pour les personnes ayant précisés qu'elles venaient à
66 66
   pieds, le champ serait complété avec l'expression suivante :
67
   <code>var_mode_de_transport != "Piéton"</code> (où le <code>!=</code>
67
   <code>form_var_mode_de_transport != "Piéton"</code> (où le <code>!=</code>
68 68
   correspond à la syntaxe Python signifiant « différent de »).
69 69
  </p>
70 70

  
tests/test_form_pages.py
258 258
    assert '3rd page' in resp.body
259 259
    assert '<li class="current"><span>3rd page</span>' in resp.body
260 260

  
261
def test_form_multi_page_condition_select_new_varname(pub):
262
    formdef = create_formdef()
263
    formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
264
            fields.ItemField(id='1', label='select', type='item',
265
                required=True,
266
                varname='foo', items=['Foo', 'Bar']),
267
            fields.PageField(id='2', label='2nd page', type='page',
268
                condition='form_var_foo == "Foo"'),
269
            fields.PageField(id='3', label='3rd page', type='page',
270
                condition='form_var_foo == "Bar"'),
271
            fields.StringField(id='3', label='string 2')]
272
    formdef.store()
273
    formdef.data_class().wipe()
274
    resp = get_app(pub).get('/test/')
275
    assert not '2nd page' in resp.body
276
    assert not '3rd page' in resp.body
277
    resp.forms[0]['f1'] = 'Foo'
278
    resp = resp.forms[0].submit('submit')
279
    assert '2nd page' in resp.body
280
    assert not '3rd page' in resp.body
281
    assert '<li class="current"><span>2nd page</span>' in resp.body
282

  
283
    resp = get_app(pub).get('/test/')
284
    resp.forms[0]['f1'] = 'Bar'
285
    resp = resp.forms[0].submit('submit')
286
    assert not '2nd page' in resp.body
287
    assert '3rd page' in resp.body
288
    assert '<li class="current"><span>3rd page</span>' in resp.body
289

  
290

  
261 291
def test_form_submit_with_user(pub):
262 292
    create_user(pub)
263 293
    formdef = create_formdef()
wcs/fields.py
1172 1172
            return True
1173 1173

  
1174 1174
        from formdata import get_dict_with_varnames
1175
        data = get_dict_with_varnames(formdef.fields, dict)
1176
        data.update(get_publisher().substitutions.get_context_variables())
1175
        data = get_publisher().substitutions.get_context_variables()
1176

  
1177
        # create variables with values currently being evaluated, not yet
1178
        # available in the formdata
1179
        dict_with_varnames = get_dict_with_varnames(formdef.fields, dict)
1180
        # add them as var_xxx for compatibility
1181
        data.update(dict_with_varnames)
1182
        # and add them as form_var_xxx, overriding context variables with their
1183
        # "live" value
1184
        for k, v in dict_with_varnames.items():
1185
            data['form_' + k] = v
1177 1186

  
1178 1187
        try:
1179 1188
            if eval(self.condition, get_publisher().get_global_eval_dict(), data):
1180
-