Projet

Général

Profil

0001-misc-add-.split-method-to-lazy-variables-60994.patch

Frédéric Péters, 24 janvier 2022 20:32

Télécharger (3,17 ko)

Voir les différences:

Subject: [PATCH] misc: add .split() method to lazy variables (#60994)

 tests/test_formdata.py | 39 +++++++++++++++++++++++++++++++++++++++
 wcs/variables.py       | 10 +++++-----
 2 files changed, 44 insertions(+), 5 deletions(-)
tests/test_formdata.py
3430 3430
    assert tmpl.render(context) == ''
3431 3431

  
3432 3432

  
3433
def test_items_field_split(pub):
3434
    NamedDataSource.wipe()
3435
    data_source = NamedDataSource(name='foobar')
3436
    data_source.data_source = {
3437
        'type': 'formula',
3438
        'value': repr(
3439
            [
3440
                {'id': '1', 'text': 'un'},
3441
                {'id': '2', 'text': 'deux'},
3442
                {'id': '3', 'text': 'trois'},
3443
                {'id': '4', 'text': 'quatre'},
3444
            ]
3445
        ),
3446
    }
3447
    data_source.store()
3448

  
3449
    FormDef.wipe()
3450
    formdef = FormDef()
3451
    formdef.name = 'foobar'
3452
    formdef.fields = [
3453
        fields.ItemsField(id='1', label='items', items=['aa', 'ab', 'ac'], varname='itemsfield'),
3454
        fields.ItemsField(id='2', label='items2', varname='items2field', data_source={'type': 'foobar'}),
3455
    ]
3456
    formdef.store()
3457

  
3458
    formdata = formdef.data_class()()
3459
    formdata.data = {}
3460
    formdef.fields[0].set_value(formdata.data, ['aa', 'ab'])
3461
    formdef.fields[1].set_value(formdata.data, ['1', '3'])
3462
    formdata.store()
3463

  
3464
    for mode in (None, 'lazy'):
3465
        pub.substitutions.reset()
3466
        pub.substitutions.feed(formdef)
3467
        with pub.substitutions.temporary_feed(formdata, force_mode=mode):
3468
            assert WorkflowStatusItem.compute('=form_var_itemsfield', raises=True) == 'aa, ab'
3469
            assert WorkflowStatusItem.compute('=form_var_itemsfield.split(",")[0]', raises=True) == 'aa'
3470

  
3471

  
3433 3472
def test_attachment_part_path_migration(pub):
3434 3473
    FormDef.wipe()
3435 3474
    formdef = FormDef()
wcs/variables.py
831 831
        warnings.warn('Deprecated use of .strip method', DeprecationWarning)
832 832
        return self.get_value().strip(*args)
833 833

  
834
    def split(self, *args, **kwargs):
835
        # Compatibility with usage of variable as a string. It is
836
        # recommended to use appropriate properties instead.
837
        return str(self).split(*args, **kwargs)
838

  
834 839
    def __getstate__(self):
835 840
        raise AssertionError('lazy cannot be pickled')
836 841

  
......
1071 1076

  
1072 1077

  
1073 1078
class LazyFieldVarMap(LazyFieldVarStructured):
1074
    def split(self, *args, **kwargs):
1075
        # Compatibility with usage of map variable as a string. It is
1076
        # recommended to use lat/lon properties instead.
1077
        return self._data.get(self._field.id).split(*args, **kwargs)
1078

  
1079 1079
    def inspect_keys(self):
1080 1080
        return ['lat', 'lon'] if self.get_field_var_value() else []
1081 1081

  
1082
-