Refs #33012 -- Moved PickleSerializer to django.core.serializers.base and added tests.
This commit is contained in:
parent
50ed545e2f
commit
dca4c2ff76
|
@ -1,20 +1,7 @@
|
||||||
import pickle
|
from django.core.serializers.base import (
|
||||||
|
PickleSerializer as BasePickleSerializer,
|
||||||
|
)
|
||||||
from django.core.signing import JSONSerializer as BaseJSONSerializer
|
from django.core.signing import JSONSerializer as BaseJSONSerializer
|
||||||
|
|
||||||
|
|
||||||
class PickleSerializer:
|
|
||||||
"""
|
|
||||||
Simple wrapper around pickle to be used in signing.dumps and
|
|
||||||
signing.loads.
|
|
||||||
"""
|
|
||||||
protocol = pickle.HIGHEST_PROTOCOL
|
|
||||||
|
|
||||||
def dumps(self, obj):
|
|
||||||
return pickle.dumps(obj, self.protocol)
|
|
||||||
|
|
||||||
def loads(self, data):
|
|
||||||
return pickle.loads(data)
|
|
||||||
|
|
||||||
|
|
||||||
JSONSerializer = BaseJSONSerializer
|
JSONSerializer = BaseJSONSerializer
|
||||||
|
PickleSerializer = BasePickleSerializer
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
"""
|
"""
|
||||||
Module for abstract serializer/unserializer base classes.
|
Module for abstract serializer/unserializer base classes.
|
||||||
"""
|
"""
|
||||||
|
import pickle
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
@ -9,6 +10,21 @@ from django.db import models
|
||||||
DEFER_FIELD = object()
|
DEFER_FIELD = object()
|
||||||
|
|
||||||
|
|
||||||
|
class PickleSerializer:
|
||||||
|
"""
|
||||||
|
Simple wrapper around pickle to be used in signing.dumps()/loads() and
|
||||||
|
cache backends.
|
||||||
|
"""
|
||||||
|
def __init__(self, protocol=None):
|
||||||
|
self.protocol = pickle.HIGHEST_PROTOCOL if protocol is None else protocol
|
||||||
|
|
||||||
|
def dumps(self, obj):
|
||||||
|
return pickle.dumps(obj, self.protocol)
|
||||||
|
|
||||||
|
def loads(self, data):
|
||||||
|
return pickle.loads(data)
|
||||||
|
|
||||||
|
|
||||||
class SerializerDoesNotExist(KeyError):
|
class SerializerDoesNotExist(KeyError):
|
||||||
"""The requested serializer was not found."""
|
"""The requested serializer was not found."""
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import pickle
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from functools import partialmethod
|
from functools import partialmethod
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
@ -5,7 +6,7 @@ from unittest import mock, skipIf
|
||||||
|
|
||||||
from django.core import serializers
|
from django.core import serializers
|
||||||
from django.core.serializers import SerializerDoesNotExist
|
from django.core.serializers import SerializerDoesNotExist
|
||||||
from django.core.serializers.base import ProgressBar
|
from django.core.serializers.base import PickleSerializer, ProgressBar
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature
|
from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature
|
||||||
|
@ -418,6 +419,21 @@ class SerializersTransactionTestBase:
|
||||||
self.assertEqual(art_obj.author.name, "Agnes")
|
self.assertEqual(art_obj.author.name, "Agnes")
|
||||||
|
|
||||||
|
|
||||||
|
class PickleSerializerTests(SimpleTestCase):
|
||||||
|
def test_serializer_protocol(self):
|
||||||
|
serializer = PickleSerializer(protocol=3)
|
||||||
|
self.assertEqual(serializer.protocol, 3)
|
||||||
|
# If protocol is not provided, it defaults to pickle.HIGHEST_PROTOCOL
|
||||||
|
serializer = PickleSerializer()
|
||||||
|
self.assertEqual(serializer.protocol, pickle.HIGHEST_PROTOCOL)
|
||||||
|
|
||||||
|
def test_serializer_loads_dumps(self):
|
||||||
|
serializer = PickleSerializer()
|
||||||
|
test_data = 'test data'
|
||||||
|
dump = serializer.dumps(test_data)
|
||||||
|
self.assertEqual(serializer.loads(dump), test_data)
|
||||||
|
|
||||||
|
|
||||||
def register_tests(test_class, method_name, test_func, exclude=()):
|
def register_tests(test_class, method_name, test_func, exclude=()):
|
||||||
"""
|
"""
|
||||||
Dynamically create serializer tests to ensure that all registered
|
Dynamically create serializer tests to ensure that all registered
|
||||||
|
|
Loading…
Reference in New Issue