Skip to main content

Makes un-pickle-able objects pick-able.

Project description

PyPI-License PyPI-Version

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

License

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pickle-mixin-1.0.2.tar.gz (5.1 kB view details)

Uploaded Source

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

Hashes for pickle-mixin-1.0.2.tar.gz
Algorithm Hash digest
SHA256 d4983cd09939f6e402c69ba4f4200f2e6ccdfd39c020f6d1091290d78f17625c
MD5 69bb840886237f83f86869a79736d6d4
BLAKE2b-256 02779d5eb2201bbc130e2a5cc41fc949e4ab0da74b619107eac1c511be3af7a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page