Projet

Général

Profil

0002-formdef-prevent-hiding-of-EOFError-on-new-style-pick.patch

Benjamin Dauvergne, 22 février 2021 23:53

Télécharger (1,82 ko)

Voir les différences:

Subject: [PATCH 2/3] formdef: prevent hiding of EOFError on new style pickled
 formdef (#51327)

 tests/test_formdef.py | 20 ++++++++++++++++++++
 wcs/formdef.py        |  5 ++++-
 2 files changed, 24 insertions(+), 1 deletion(-)
tests/test_formdef.py
622 622
    assert formdef.fields[0].label == 'Test'
623 623
    assert formdef.workflow.possible_status[0].items[0].varname == 'blah'
624 624
    assert formdef.workflow.possible_status[0].items[0].formdef.fields[0].varname == 'str'
625

  
626

  
627
def test_lightweight(pub):
628
    FormDef.wipe()
629
    formdef = FormDef()
630
    formdef.name = 'basic formdef'
631
    formdef.fields = [
632
        StringField(id='1', label='Test', type='string', varname='foo'),
633
    ]
634
    formdef.store()
635

  
636
    # load works
637
    FormDef.get(formdef.id)
638

  
639
    # truncate the pickle, now load should fail
640
    with open(formdef.get_object_filename(), 'rb+') as fd:
641
        pickle.load(fd)
642
        fd.truncate(fd.tell())
643
    with pytest.raises(KeyError):
644
        FormDef.get(formdef.id)
wcs/formdef.py
1551 1551
            try:
1552 1552
                o.fields = pickle.load(fd, **PICKLE_KWARGS)
1553 1553
            except EOFError:
1554
                pass  # old format
1554
                if isinstance(getattr(o, 'fields', None), list):
1555
                    pass  # old format
1556
                else:
1557
                    raise
1555 1558
        return o
1556 1559

  
1557 1560
    @classmethod
1558
-