Projet

Général

Profil

0002-misc-add-custom-lazy-field-for-map-variables-for-str.patch

Frédéric Péters, 06 décembre 2018 12:41

Télécharger (3,51 ko)

Voir les différences:

Subject: [PATCH 2/2] misc: add custom lazy field for map variables, for string
 compat (#28193)

 tests/test_formdata.py | 21 +++++++++++++++------
 wcs/variables.py       |  9 +++++++++
 2 files changed, 24 insertions(+), 6 deletions(-)
tests/test_formdata.py
671 671
def test_lazy_map_variable(pub, variable_test_data):
672 672
    formdef = FormDef.select()[0]
673 673
    formdata = formdef.data_class().select()[0]
674
    pub.substitutions.reset()
675
    pub.substitutions.feed(formdef)
676
    pub.substitutions.feed(formdata)
677 674
    for mode in (None, 'lazy'):
678
        assert WorkflowStatusItem.compute('=form_var_map') == '2;4'
679
        assert WorkflowStatusItem.compute('=form_var_map.split(";")[0]') == '2'
675
        pub.substitutions.reset()
676
        pub.substitutions.feed(formdef)
677
        with pub.substitutions.temporary_feed(formdata, force_mode=mode):
678
            assert WorkflowStatusItem.compute('=form_var_map', raises=True) == '2;4'
679
            assert WorkflowStatusItem.compute('{{ form_var_map }}', raises=True) == '2;4'
680
            assert WorkflowStatusItem.compute('=form_var_map.split(";")[0]', raises=True) == '2'
681
            assert WorkflowStatusItem.compute('{{ form_var_map|split:";"|first }}', raises=True) == '2'
682
            assert WorkflowStatusItem.compute('=form_var_map_lat', raises=True) == 2
683
            assert WorkflowStatusItem.compute('{{ form_var_map_lat }}', raises=True) == '2.0'
684
            assert WorkflowStatusItem.compute('=form_var_map_lon', raises=True) == 4
685
            assert WorkflowStatusItem.compute('{{ form_var_map_lon }}', raises=True) == '4.0'
680 686

  
681 687
    formdata.data['7'] = None
682 688
    formdata.store()
......
684 690
    pub.substitutions.feed(formdef)
685 691
    pub.substitutions.feed(formdata)
686 692
    for mode in (None, 'lazy'):
687
        assert WorkflowStatusItem.compute('=form_var_map') is None
693
        pub.substitutions.reset()
694
        pub.substitutions.feed(formdef)
695
        with pub.substitutions.temporary_feed(formdata, force_mode=mode):
696
            assert WorkflowStatusItem.compute('=form_var_map', raises=True) is None
688 697

  
689 698
def test_lazy_conditions(pub, variable_test_data):
690 699
    condition = Condition({'type': 'django', 'value': 'form_var_foo_foo == "bar"'})
wcs/variables.py
307 307

  
308 308
        if field.key == 'date':
309 309
            return LazyFieldVarDate(self.data, field, self.formdata)
310
        if field.key == 'map':
311
            return LazyFieldVarMap(self.data, field, self.formdata)
310 312

  
311 313
        return LazyFieldVar(self.data, field, self.formdata)
312 314

  
......
438 440
        return self.get_raw().tm_yday
439 441

  
440 442

  
443
class LazyFieldVarMap(LazyFieldVar):
444
    def split(self, *args, **kwargs):
445
        # Compatibility with usage of map variable as a string. It is
446
        # recommended to use lat/lon properties instead.
447
        return self.data.get(self.field.id).split(*args, **kwargs)
448

  
449

  
441 450
class LazyUser(object):
442 451
    def __init__(self, user):
443 452
        self.user = user
444
-