diff options
author | Bo Bayles <bbayles@gmail.com> | 2020-05-16 05:42:07 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-16 17:42:07 +0700 |
commit | f0846a764545228d0551ec51c4c7441f2aa2a65a (patch) | |
tree | e383df6ddaf56e45e2297d16bef1990920119f9e | |
parent | 5859339a51e5f5d902d1d07603f41d95008e1065 (diff) | |
download | rq-f0846a764545228d0551ec51c4c7441f2aa2a65a.tar.gz |
Use pickle.HIGHEST_PROTOCOL by default (#1254)
-rw-r--r-- | rq/serializers.py | 8 | ||||
-rw-r--r-- | tests/test_serializers.py | 14 |
2 files changed, 19 insertions, 3 deletions
diff --git a/rq/serializers.py b/rq/serializers.py index c4b0e54..27f892f 100644 --- a/rq/serializers.py +++ b/rq/serializers.py @@ -1,9 +1,15 @@ +from functools import partial import pickle from .compat import string_types from .utils import import_attribute +class DefaultSerializer: + dumps = partial(pickle.dumps, protocol=pickle.HIGHEST_PROTOCOL) + loads = pickle.loads + + def resolve_serializer(serializer): """This function checks the user defined serializer for ('dumps', 'loads') methods It returns a default pickle serializer if not found else it returns a MySerializer @@ -11,7 +17,7 @@ def resolve_serializer(serializer): Also accepts a string path to serializer that will be loaded as the serializer """ if not serializer: - return pickle + return DefaultSerializer if isinstance(serializer, string_types): serializer = import_attribute(serializer) diff --git a/tests/test_serializers.py b/tests/test_serializers.py index 58d093f..1e3e671 100644 --- a/tests/test_serializers.py +++ b/tests/test_serializers.py @@ -4,10 +4,11 @@ from __future__ import (absolute_import, division, print_function, import json import pickle +import pickletools import queue import unittest -from rq.serializers import resolve_serializer +from rq.serializers import DefaultSerializer, resolve_serializer class TestSerializers(unittest.TestCase): @@ -15,7 +16,16 @@ class TestSerializers(unittest.TestCase): """Ensure function resolve_serializer works correctly""" serializer = resolve_serializer(None) self.assertIsNotNone(serializer) - self.assertEqual(serializer, pickle) + self.assertEqual(serializer, DefaultSerializer) + + # Test round trip with default serializer + test_data = {'test': 'data'} + serialized_data = serializer.dumps(test_data) + self.assertEqual(serializer.loads(serialized_data), test_data) + self.assertEqual( + next(pickletools.genops(serialized_data))[1], + pickle.HIGHEST_PROTOCOL + ) # Test using json serializer serializer = resolve_serializer(json) |