Projet

Général

Profil

0001-forms-add-support-for-_live-subvariables-in-cascaded.patch

Frédéric Péters, 03 décembre 2021 14:53

Télécharger (3,19 ko)

Voir les différences:

Subject: [PATCH] forms: add support for _live subvariables in cascaded
 computed fields (#59305)

 tests/form_pages/test_computed_field.py |  8 +++++++-
 wcs/forms/root.py                       | 10 ++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)
tests/form_pages/test_computed_field.py
623 623
            freeze_on_initial_value=True,
624 624
            data_source=ds,
625 625
        ),
626
        fields.CommentField(id='2', label='X{{ form_var_computed_live_var_name }}Y', type='comment'),
626
        fields.ComputedField(
627
            id='2', label='computed2', varname='b', value_template='B{{form_var_computed_live_var_name}}B'
628
        ),
629
        fields.CommentField(id='3', label='X{{ form_var_computed_live_var_name }}Y', type='comment'),
630
        fields.CommentField(id='4', label='X{{ form_var_b }}Y', type='comment'),
627 631
    ]
628 632
    formdef.store()
629 633
    formdef.data_class().wipe()
630 634

  
631 635
    resp = get_app(pub).get('/test/?param=%s' % carddata.id)
632 636
    assert 'XbazY' in resp.text
637
    assert 'XBbazBY' in resp.text
633 638

  
634 639
    resp = get_app(pub).get('/test/?param=%s' % 'invalid')
635 640
    assert 'XY' in resp.text
641
    assert 'XBBY' in resp.text
wcs/forms/root.py
646 646
        # create a temporary map using form variable names, to be used as context
647 647
        # variables during evaluation (via temporary_feed below), so we can have
648 648
        # computed fields depending on previously computed fields from the same page.
649
        from wcs.variables import LazyFieldVarComputed
650

  
649 651
        mapped_computed_values = {}
650 652
        for field in fields:
651 653
            if field.id in computed_values:
652
                mapped_computed_values['form_var_%s' % field.varname] = computed_values[field.id]
654
                mapped_computed_values['form_var_%s' % field.varname] = LazyFieldVarComputed(
655
                    {str(field.id): computed_values[field.id]}, field=field
656
                )
653 657

  
654 658
        with get_publisher().substitutions.temporary_feed(mapped_computed_values, force_mode='lazy'):
655 659
            for field in fields:
......
666 670
                    else:
667 671
                        value = get_publisher().get_cached_complex_data(value)
668 672
                    computed_values[field.id] = value
669
                    mapped_computed_values['form_var_%s' % field.varname] = value
673
                    mapped_computed_values['form_var_%s' % field.varname] = LazyFieldVarComputed(
674
                        {str(field.id): computed_values[field.id]}, field=field
675
                    )
670 676
                    get_publisher().substitutions.invalidate_cache()
671 677

  
672 678
        return computed_values
673
-