multiformats is an upstream module in a package I'm using (MarshalX/atproto) and I've been having some issues with pickling objects from multiformats. (I need to pickle them to serialize them between threads.)
It seems that Pickle requires that all objects with a custom implementation of __new__() also include a function __getnewargs__() (see StackOverflow post). For instance, attempting to unpickle a pickled CID object with pickle.loads() gives an error
TypeError: CID.__new__() missing 4 required positional arguments: 'base', 'version', 'codec', and 'digest'
which can be fixed by adding the following function to multiformats/cid/__init__.py:CID:
def __getnewargs__(self):
return self.base, self.version, self.codec, self.digest
allowing unpickling as expected.
Would be happy to submit a PR to fix this later this week (would do it right now but I should really go to bed...)
Thanks for your help!
multiformats is an upstream module in a package I'm using (MarshalX/atproto) and I've been having some issues with pickling objects from multiformats. (I need to pickle them to serialize them between threads.)
It seems that Pickle requires that all objects with a custom implementation of
__new__()also include a function__getnewargs__()(see StackOverflow post). For instance, attempting to unpickle a pickled CID object withpickle.loads()gives an errorwhich can be fixed by adding the following function to
multiformats/cid/__init__.py:CID:allowing unpickling as expected.
Would be happy to submit a PR to fix this later this week (would do it right now but I should really go to bed...)
Thanks for your help!