Source code for py2store.serializers.pickled

"""
functions to pickle objects
"""
import pickle
import marshal
from functools import partial

rw_funcs_maker_for = dict()


# TODO: Make (in a different module) a factory to encapsulate the common pattern of the next three functions, and others


[docs]def mk_pickle_rw_funcs( fix_imports=True, protocol=None, pickle_encoding='ASCII', pickle_errors='strict', ): """Generates a reader and writer using pickle. That is, a pair of parametrized loads and dumps >>> read, write = mk_pickle_rw_funcs() >>> d = {'a': 'simple', 'and': {'a': b'more', 'complex': [1, 2.2, dict]}} >>> serialized_d = write(d) >>> deserialized_d = read(serialized_d) >>> assert d == deserialized_d """ return ( partial( pickle.loads, fix_imports=fix_imports, encoding=pickle_encoding, errors=pickle_errors, ), partial(pickle.dumps, protocol=protocol, fix_imports=fix_imports), )
rw_funcs_maker_for['pickle'] = mk_pickle_rw_funcs
[docs]def mk_marshal_rw_funcs( **kwargs, ): # TODO: Check actual arguments for marshal load and dump """Generates a reader and writer using marshal. That is, a pair of parametrized loads and dumps >>> read, write = mk_marshal_rw_funcs() >>> d = {'a': 'simple', 'and': {'a': b'more', 'complex': [1, 2.2]}} >>> serialized_d = write(d) >>> deserialized_d = read(serialized_d) >>> assert d == deserialized_d """ return (partial(marshal.loads, **kwargs), partial(marshal.dumps, **kwargs))
rw_funcs_maker_for['marshal'] = mk_marshal_rw_funcs ##### Extras (requiring some third-party packages ###################################################################### from py2store.util import ModuleNotFoundIgnore with ModuleNotFoundIgnore(): import dill def mk_dill_rw_funcs( ignore=None, protocol=None, byref=None, fmode=None, recurse=None ): """Generates a reader and writer using dill. That is, a pair of parametrized loads and dumps >>> read, write = mk_dill_rw_funcs() >>> d = {'a': 'simple', 'and': {'a': b'more', 'complex': [1, 2.2, dict]}} >>> serialized_d = write(d) >>> deserialized_d = read(serialized_d) >>> assert d == deserialized_d """ return ( partial(dill.loads, ignore=ignore), partial( dill.dumps, protocol=protocol, byref=byref, fmode=fmode, recurse=recurse, ), ) rw_funcs_maker_for['dill'] = mk_dill_rw_funcs # class PickleMixin: # """Local files store with pickle serialization""" # # def __init__(self, path_format, # fix_imports=True, protocol=None, pickle_encoding='ASCII', pickle_errors='strict', # **open_kwargs): # super().__init__(path_format, mode='b', **open_kwargs) # self._loads = partial(pickle.loads, fix_imports=fix_imports, encoding=pickle_encoding, errors=pickle_errors) # self._dumps = partial(pickle.dumps, protocol=protocol, fix_imports=fix_imports) # # def __getitem__(self, k): # return self._loads(super().__getitem__(k)) # # def __setitem__(self, k, v): # return super().__setitem__(k, self._dumps(v))