diff options
Diffstat (limited to 'kombu/serialization.py')
| -rw-r--r-- | kombu/serialization.py | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/kombu/serialization.py b/kombu/serialization.py index 94a57ae1..5942408b 100644 --- a/kombu/serialization.py +++ b/kombu/serialization.py @@ -11,6 +11,7 @@ Serialization utilities. from __future__ import absolute_import import codecs +import os import sys import pickle as pypickle @@ -57,16 +58,24 @@ else: # cPickle.loads does not support buffer() objects, # but we can just create a StringIO and use load. if sys.version_info[0] == 3: - from io import StringIO + from io import BytesIO else: try: - from cStringIO import StringIO # noqa + from cStringIO import StringIO as BytesIO # noqa except ImportError: - from StringIO import StringIO # noqa + from StringIO import StringIO as BytesIO # noqa + +#: Kombu requires Python 2.5 or later so we use protocol 2 by default. +#: There's a new protocol (3) but this is only supported by Python 3. +pickle_protocol = int(os.environ.get('PICKLE_PROTOCOL', 2)) + +#: Kombu requires Python 2.5 or later so we use protocol 2 by default. +#: There's a new protocol (3) but this is only supported by Python 3. +pickle_protocol = int(os.environ.get('PICKLE_PROTOCOL', 2)) def pickle_loads(s, load=pickle_load): - return load(StringIO(s)) + return load(BytesIO(s)) class SerializerRegistry(object): @@ -327,7 +336,11 @@ else: def register_pickle(): """The fastest serialization method, but restricts you to python clients.""" - registry.register('pickle', pickle.dumps, unpickle, + + def dumps(obj, dumper=pickle.dumps): + return dumper(obj, protocol=pickle_protocol) + + registry.register('pickle', dumps, unpickle, content_type='application/x-python-serialize', content_encoding='binary') |
