mirror of https://github.com/django/django.git
Fixed #14823 -- Corrected bootstrapping problems with register_serializers. Thanks to miker985@uw.edu for the report and draft patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15336 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
456b8a9d0c
commit
4a3ea263ef
|
@ -48,6 +48,8 @@ def register_serializer(format, serializer_module, serializers=None):
|
|||
directly into the global register of serializers. Adding serializers
|
||||
directly is not a thread-safe operation.
|
||||
"""
|
||||
if serializers is None and not _serializers:
|
||||
_load_serializers()
|
||||
module = importlib.import_module(serializer_module)
|
||||
if serializers is None:
|
||||
_serializers[format] = module
|
||||
|
@ -56,6 +58,8 @@ def register_serializer(format, serializer_module, serializers=None):
|
|||
|
||||
def unregister_serializer(format):
|
||||
"Unregister a given serializer. This is not a thread-safe operation."
|
||||
if not _serializers:
|
||||
_load_serializers()
|
||||
del _serializers[format]
|
||||
|
||||
def get_serializer(format):
|
||||
|
|
|
@ -3,14 +3,65 @@ from datetime import datetime
|
|||
from StringIO import StringIO
|
||||
from xml.dom import minidom
|
||||
|
||||
from django.conf import settings
|
||||
from django.core import serializers
|
||||
from django.db import transaction
|
||||
from django.test import TestCase, TransactionTestCase, Approximate
|
||||
from django.utils import simplejson
|
||||
from django.utils import simplejson, unittest
|
||||
|
||||
from models import Category, Author, Article, AuthorProfile, Actor, \
|
||||
Movie, Score, Player, Team
|
||||
|
||||
class SerializerRegistrationTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.old_SERIALIZATION_MODULES = getattr(settings, 'SERIALIZATION_MODULES', None)
|
||||
self.old_serializers = serializers._serializers
|
||||
|
||||
serializers._serializers = {}
|
||||
settings.SERIALIZATION_MODULES = {
|
||||
"json2" : "django.core.serializers.json",
|
||||
}
|
||||
|
||||
def tearDown(self):
|
||||
serializers._serializers = self.old_serializers
|
||||
if self.old_SERIALIZATION_MODULES:
|
||||
settings.SERIALIZATION_MODULES = self.old_SERIALIZATION_MODULES
|
||||
else:
|
||||
delattr(settings, 'SERIALIZATION_MODULES')
|
||||
|
||||
def test_register(self):
|
||||
"Registering a new serializer populates the full registry. Refs #14823"
|
||||
serializers.register_serializer('json3', 'django.core.serializers.json')
|
||||
|
||||
public_formats = serializers.get_public_serializer_formats()
|
||||
self.assertIn('json3', public_formats)
|
||||
self.assertIn('json2', public_formats)
|
||||
self.assertIn('xml', public_formats)
|
||||
|
||||
def test_unregister(self):
|
||||
"Unregistering a serializer doesn't cause the registry to be repopulated. Refs #14823"
|
||||
serializers.unregister_serializer('xml')
|
||||
serializers.register_serializer('json3', 'django.core.serializers.json')
|
||||
|
||||
public_formats = serializers.get_public_serializer_formats()
|
||||
|
||||
self.assertNotIn('xml', public_formats)
|
||||
self.assertIn('json3', public_formats)
|
||||
|
||||
def test_builtin_serializers(self):
|
||||
"Requesting a list of serializer formats popuates the registry"
|
||||
all_formats = set(serializers.get_serializer_formats())
|
||||
public_formats = set(serializers.get_public_serializer_formats())
|
||||
|
||||
self.assertIn('xml', all_formats),
|
||||
self.assertIn('xml', public_formats)
|
||||
|
||||
self.assertIn('json2', all_formats)
|
||||
self.assertIn('json2', public_formats)
|
||||
|
||||
self.assertIn('python', all_formats)
|
||||
self.assertNotIn('python', public_formats)
|
||||
|
||||
class SerializersTestBase(object):
|
||||
@staticmethod
|
||||
def _comparison_value(value):
|
||||
|
|
Loading…
Reference in New Issue