Projet

Général

Profil

0001-fields-do-not-store-cached-block-in-pickle-58985.patch

Frédéric Péters, 26 novembre 2021 10:59

Télécharger (2,34 ko)

Voir les différences:

Subject: [PATCH] fields: do not store cached block in pickle (#58985)

 tests/test_fields.py | 30 ++++++++++++++++++++++++++++++
 wcs/fields.py        | 12 ++++++++++++
 2 files changed, 42 insertions(+)
tests/test_fields.py
6 6
from quixote.http_request import Upload
7 7

  
8 8
from wcs import fields
9
from wcs.blocks import BlockDef
9 10
from wcs.data_sources import NamedDataSource
10 11
from wcs.formdef import FormDef
11 12
from wcs.qommon import sessions
......
743 744
        ('', '—', ''),
744 745
        ('computed', 'Computed Data', 'computed'),
745 746
    ]
747

  
748

  
749
def test_block_do_not_pickle_cache(pub):
750
    FormDef.wipe()
751
    BlockDef.wipe()
752

  
753
    block = BlockDef()
754
    block.name = 'foobar'
755
    block.fields = [
756
        fields.StringField(id='123', required=True, label='Test', type='string'),
757
        fields.StringField(id='234', required=True, label='Test2', type='string'),
758
    ]
759
    block.store()
760

  
761
    formdef = FormDef()
762
    formdef.name = 'form title'
763
    formdef.fields = [
764
        fields.BlockField(id='1', label='test', type='block:foobar', hint='hintblock'),
765
    ]
766
    formdef.store()
767

  
768
    assert formdef.fields[0]._block is None
769
    formdef.fields[0].block
770
    assert formdef.fields[0]._block is not None
771

  
772
    formdef.store()
773

  
774
    formdef = FormDef.get(formdef.id)
775
    assert formdef.fields[0]._block is None
wcs/fields.py
3465 3465
        node.text = od_clean_text(force_text(value))
3466 3466
        return node
3467 3467

  
3468
    def __getstate__(self):
3469
        # do not store _block cache
3470
        odict = copy.copy(self.__dict__)
3471
        if '_block' in odict:
3472
            del odict['_block']
3473
        return odict
3474

  
3475
    def __setstate__(self, ndict):
3476
        # make sure a cached copy of _block is not restored
3477
        self.__dict__ = ndict
3478
        self._block = None
3479

  
3468 3480

  
3469 3481
class ComputedField(Field):
3470 3482
    key = 'computed'
3471
-