Ticket #15889: 15889-get_serializer-specific-exception_3.diff

File 15889-get_serializer-specific-exception_3.diff, 3.5 KB (added by magopian, 4 years ago)

integrated Alex's new feedbacks

  • django/core/serializers/__init__.py

    diff --git a/django/core/serializers/__init__.py b/django/core/serializers/__init__.py
    index 7afc94c..b52165f 100644
    a b To add your own serializers, use the SERIALIZATION_MODULES setting:: 
    1818
    1919from django.conf import settings
    2020from django.utils import importlib
     21from django.core.serializers.base import SerializerDoesNotExist
    2122
    2223# Built-in serializers
    2324BUILTIN_SERIALIZERS = {
    def unregister_serializer(format): 
    6566def get_serializer(format):
    6667    if not _serializers:
    6768        _load_serializers()
     69    if format not in _serializers:
     70        raise SerializerDoesNotExist(format)
    6871    return _serializers[format].Serializer
    6972
    7073def get_serializer_formats():
  • django/core/serializers/base.py

    diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py
    index cdcc7fa..6b532af 100644
    a b from django.db import models 
    88from django.utils.encoding import smart_str, smart_unicode
    99from django.utils import datetime_safe
    1010
     11class SerializerDoesNotExist(KeyError):
     12    """A requested serializer was not found."""
     13    pass
     14
    1115class SerializationError(Exception):
    1216    """Something bad happened during serialization."""
    1317    pass
  • docs/topics/serialization.txt

    diff --git a/docs/topics/serialization.txt b/docs/topics/serialization.txt
    index c8acc85..f0f17b2 100644
    a b This is useful if you want to serialize data directly to a file-like object 
    3838    out = open("file.xml", "w")
    3939    xml_serializer.serialize(SomeModel.objects.all(), stream=out)
    4040
     41.. note::
     42
     43    Calling :func:`~django.core.serializers.get_serializer` with an unknown
     44    :ref:`format <serialization-formats>` will raise a
     45    :class:`~django.core.serializers.SerializerDoesNotExist` exception.
     46
    4147Subset of fields
    4248~~~~~~~~~~~~~~~~
    4349
  • tests/regressiontests/serializers_regress/tests.py

    diff --git a/tests/regressiontests/serializers_regress/tests.py b/tests/regressiontests/serializers_regress/tests.py
    index de57a6f..6b302f0 100644
    a b forward, backwards and self references. 
    88"""
    99
    1010
     11from __future__ import with_statement
    1112import datetime
    1213import decimal
    1314try:
    except ImportError: 
    1718
    1819from django.conf import settings
    1920from django.core import serializers, management
     21from django.core.serializers import SerializerDoesNotExist
    2022from django.db import transaction, DEFAULT_DB_ALIAS, connection
    2123from django.test import TestCase
    2224from django.utils.functional import curry
    if connection.features.allows_primary_key_0: 
    350352# Dynamically create serializer tests to ensure that all
    351353# registered serializers are automatically tested.
    352354class SerializerTests(TestCase):
    353     pass
     355
     356    def test_get_unknown_serializer(self):
     357        """
     358        #15889: get_serializer('nonsense') raises a SerializerDoesNotExist
     359        """
     360        self.assertRaises(SerializerDoesNotExist,
     361                          serializers.get_serializer, 'nonsense')
     362        # subclasses KeyError for backwards compatibility
     363        self.assertRaises(KeyError, serializers.get_serializer, 'nonsense')
     364
     365        # SerializerDoesNotExist is instantiated with the inexistent format
     366        with self.assertRaises(SerializerDoesNotExist) as cm:
     367            serializers.get_serializer('nonsense')
     368        self.assertEqual(cm.exception.args, ('nonsense',))
    354369
    355370def serializerTest(format, self):
    356371
Back to Top