diff options
author | Trevor Joynson (trevorj) <github@skywww.net> | 2017-05-31 19:17:16 -0700 |
---|---|---|
committer | Trevor Joynson (trevorj) <github@skywww.net> | 2017-05-31 19:17:16 -0700 |
commit | 6818eb6c8fd83820abdb0f7bbe012f83e1915bef (patch) | |
tree | dd6fa7dcea5f95e0d2982d1335e638af058c21ac | |
parent | 4e4cc98433573cc06f05bad4fd46c4985831d19c (diff) | |
download | pymemcache-6818eb6c8fd83820abdb0f7bbe012f83e1915bef.tar.gz |
Use only the highest, premium quality picklers available at runtime.
Also include a forewarning note on Python "pickleableness".
-rw-r--r-- | pymemcache/serde.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/pymemcache/serde.py b/pymemcache/serde.py index 6291d61..98bde52 100644 --- a/pymemcache/serde.py +++ b/pymemcache/serde.py @@ -30,6 +30,14 @@ FLAG_LONG = 1 << 2 FLAG_COMPRESSED = 1 << 3 # unused, to main compatability with python-memcached FLAG_TEXT = 1 << 4 +# Pickle protocol version (-1 for highest available to runtime) +# Warning with `0`: If somewhere in your value lies a slotted object, +# ie defines `__slots__`, even if you do not include it in your pickleable +# state via `__getstate__`, python will complain with something like: +# TypeError: a class that defines __slots__ without defining __getstate__ +# cannot be pickled +PICKLE_VERSION = -1 + def python_memcache_serializer(key, value): flags = 0 @@ -55,7 +63,7 @@ def python_memcache_serializer(key, value): else: flags |= FLAG_PICKLE output = BytesIO() - pickler = pickle.Pickler(output, 0) + pickler = pickle.Pickler(output, PICKLE_VERSION) pickler.dump(value) value = output.getvalue() |