pickle-mixin 1.0.2

Last updated:

0 purchases

pickle-mixin 1.0.2 Image
pickle-mixin 1.0.2 Images
Add to Cart

Description:

picklemixin 1.0.2

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')



Authors

Danilo Horta - https://github.com/Horta



License
This project is licensed under the MIT License - see the
LICENSE file for details

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.