summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrevor Joynson (trevorj) <github@skywww.net>2017-05-31 19:17:16 -0700
committerTrevor Joynson (trevorj) <github@skywww.net>2017-05-31 19:17:16 -0700
commit6818eb6c8fd83820abdb0f7bbe012f83e1915bef (patch)
treedd6fa7dcea5f95e0d2982d1335e638af058c21ac
parent4e4cc98433573cc06f05bad4fd46c4985831d19c (diff)
downloadpymemcache-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.py10
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()