0001-fields-do-not-store-cached-block-in-pickle-58985.patch
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 |
- |