.. changelog::
:version: 1.0.14
+ .. change::
+ :tags: bug, sql
+ :tickets: 3728
+
+ Fixed bug whereby the ``__getstate__`` / ``__setstate__``
+ methods for sqlalchemy.util.Properties were
+ non-working due to the transition in the 1.0 series to ``__slots__``.
+ The issue potentially impacted some third-party applications.
+ Pull request courtesy Pieter Mulder.
+
.. change::
:tags: bug, sql
:tickets: 3724
self._data[key] = obj
def __getstate__(self):
- return {'_data': self.__dict__['_data']}
+ return {'_data': self._data}
def __setstate__(self, state):
- self.__dict__['_data'] = state['_data']
+ object.__setattr__(self, '_data', state['_data'])
def __getattr__(self, key):
try:
eq_(B.something, {'foo': 1, 'bazz': 2})
+class TestProperties(fixtures.TestBase):
+
+ def test_pickle(self):
+ data = {'hello': 'bla'}
+ props = util.Properties(data)
+
+ for loader, dumper in picklers():
+ s = dumper(props)
+ p = loader(s)
+
+ eq_(props._data, p._data)
+ eq_(props.keys(), p.keys())
+
+ def test_pickle_immuatbleprops(self):
+ data = {'hello': 'bla'}
+ props = util.Properties(data).as_immutable()
+
+ for loader, dumper in picklers():
+ s = dumper(props)
+ p = loader(s)
+
+ eq_(props._data, p._data)
+ eq_(props.keys(), p.keys())
+
+ def test_pickle_orderedprops(self):
+ data = {'hello': 'bla'}
+ props = util.OrderedProperties()
+ props.update(data)
+
+ for loader, dumper in picklers():
+ s = dumper(props)
+ p = loader(s)
+
+ eq_(props._data, p._data)
+ eq_(props.keys(), p.keys())