Makes un-pickle-able objects pick-able.
Project description
Makes un-pickle-able objects pick-able.
Install
You can install it via pip
pip install pickle-mixin
Running the tests
After installation, you can test it
python -c "import pickle_mixin; pickle_mixin.test()"
as long as you have pytest.
Usage
Pickle by initialisation
Suppose that you have a class whose objects are un-pickle-able or that would demand a large amount of disk space or memory to be pickle-able. PickleByInit class lets you pickle object attributes via object initialization. Consider the following classes:
class Foo(PickleByInit):
def __init__(self, obj):
super(Foo, self).__init__()
self.obj = obj
class Bar(object):
def __init__(self, filename):
self.filename = filename
def __getstate__(self):
raise PicklingError
def init_dict(self):
return dict(filename=self.filename)
Trying to pickle as follows
f = Foo(Bar('file.txt'))
pickle.dumps(f)
would raise a PicklingError. The following on the other hand would work:
f = Foo(Bar('file.txt'))
f.set_signature_only_attr('obj')
pickle.dumps(f)
The un-pickling process of f.obj attribute happens via object initialisation, passing the returned dictionary from init_dict as keyword arguments to Bar.__init__.
Mixing classes with and without slots
Pickling does not save attributes defined via __slots__ in the following case:
class Foo(object):
__slots__ = ['a']
def __init__(self):
self.a = 4
class Bar(Foo):
def __init__(self):
pass
SlotPickleMixin fixes it:
class FooMixin(object):
__slots__ = ['a']
def __init__(self):
self.a = 4
class BarMixin(FooMixin, SlotPickleMixin):
def __init__(self):
FooMixin.__init__(self)
SlotPickleMixin.__init__(self)
f = BarMixin()
o = pickle.dumps(f)
f = pickle.loads(o)
assert hasattr(f, 'a')
License
This project is licensed under the MIT License - see the LICENSE file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pickle-mixin-1.0.2.tar.gz.
File metadata
- Download URL: pickle-mixin-1.0.2.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4983cd09939f6e402c69ba4f4200f2e6ccdfd39c020f6d1091290d78f17625c
|
|
| MD5 |
69bb840886237f83f86869a79736d6d4
|
|
| BLAKE2b-256 |
02779d5eb2201bbc130e2a5cc41fc949e4ab0da74b619107eac1c511be3af7a7
|