Projet

Général

Profil

0001-misc-do-not-store-unknown-value-in-item-field-using-.patch

Frédéric Péters, 18 octobre 2021 13:01

Télécharger (2,54 ko)

Voir les différences:

Subject: [PATCH] misc: do not store unknown value in item field using a card
 datasource (#57880)

 tests/workflow/test_all.py | 10 ++++++++--
 wcs/fields.py              | 11 ++++++++++-
 2 files changed, 18 insertions(+), 3 deletions(-)
tests/workflow/test_all.py
4828 4828
    assert formdata.data['bo1_display'] == 'bar'
4829 4829
    assert formdata.data['bo1_structured']['attr'] == 'attr1'
4830 4830

  
4831
    # reset, and get unknown value
4831
    # reset, with unknown value
4832
    if two_pubs.is_using_postgresql():
4833
        two_pubs.loggederror_class.wipe()
4832 4834
    formdata.data = {}
4833 4835
    formdata.store()
4834 4836
    item.fields = [{'field_id': 'bo1', 'value': 'xxx'}]
4835 4837
    item.perform(formdata)
4836 4838
    formdata = formdef.data_class().get(formdata.id)
4837
    assert formdata.data['bo1'] == 'xxx'  # raw value is still kept
4839
    assert formdata.data.get('bo1') is None  # invalid value is not stored
4838 4840
    assert formdata.data.get('bo1_display') is None
4839 4841
    assert formdata.data.get('bo1_structured') is None
4842
    if two_pubs.is_using_postgresql():
4843
        assert two_pubs.loggederror_class.count() == 1
4844
        logged_error = two_pubs.loggederror_class.select()[0]
4845
        assert logged_error.summary.startswith('Failed to convert')
4840 4846

  
4841 4847
    # reset, and get empty value
4842 4848
    formdata.data = {}
wcs/fields.py
2065 2065
    def convert_value_from_anything(self, value):
2066 2066
        if value is None:
2067 2067
            return None
2068
        return str(value)
2068
        value = str(value)
2069
        if self.data_source:
2070
            data_source = data_sources.get_object(self.data_source)
2071
            if data_source.type and data_source.type.startswith('carddef:'):
2072
                value = data_source.get_card_structured_value_by_id(value)
2073
                if value:
2074
                    value = value['id']
2075
                else:
2076
                    raise ValueError('unknown card value')
2077
        return value
2069 2078

  
2070 2079
    def convert_value_from_str(self, value):
2071 2080
        # caller should also call store_display_value and store_structured_value
2072
-