Projet

Général

Profil

0001-misc-use-a-dedicated-lazy-object-for-map-variables-2.patch

Frédéric Péters, 06 décembre 2018 11:29

Télécharger (3,75 ko)

Voir les différences:

Subject: [PATCH 1/2] misc: use a dedicated lazy object for map variables
 (#28639)

 tests/test_formdata.py | 22 ++++++++++++++++------
 wcs/variables.py       | 25 +++++++++++++++++++++++++
 2 files changed, 41 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
            if mode is None:
681
                assert WorkflowStatusItem.compute('=form_var_map.split(";")[0]', raises=True) == '2'
682
            if mode == 'lazy':
683
                assert WorkflowStatusItem.compute('=form_var_map_lat', raises=True) == 2
684
                assert WorkflowStatusItem.compute('{{ form_var_map_lat }}', raises=True) == '2.0'
685
                assert WorkflowStatusItem.compute('=form_var_map_lon', raises=True) == 4
686
                assert WorkflowStatusItem.compute('{{ form_var_map_lon }}', raises=True) == '4.0'
680 687

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

  
689 699
def test_lazy_conditions(pub, variable_test_data):
690 700
    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
    @property
445
    def latlng(self):
446
        value = self.data.get(self.field.id)
447
        if not value or ';' not in value:
448
            return {'lat': '', 'lon': ''}
449
        lat, lon = value.split(';')
450
        try:
451
            lat = float(lat)
452
            lon = float(lon)
453
        except ValueError:
454
            return {'lat': '', 'lon': ''}
455
        return {'lat': lat, 'lon': lon}
456

  
457
    @property
458
    def lat(self):
459
        return self.latlng.get('lat')
460

  
461
    @property
462
    def lon(self):
463
        return self.latlng.get('lon')
464

  
465

  
441 466
class LazyUser(object):
442 467
    def __init__(self, user):
443 468
        self.user = user
444
-