diff options
| author | Markus Holtermann <info@markusholtermann.eu> | 2014-11-06 12:29:43 +0100 |
|---|---|---|
| committer | Baptiste Mispelon <bmispelon@gmail.com> | 2014-11-06 15:30:30 +0100 |
| commit | c7c098cf97fbb1416f302c76799058ad63a5f7aa (patch) | |
| tree | f2999e18d173ecf17161b1b61578b284f2607c79 | |
| parent | b07aa52e8a8e4c7fdc7265f75ce2e7992e657ae9 (diff) | |
Fixed #23770 -- Changed serialization strategy for floats with respect to NaN and Inf
Thanks to w0rp for the report
| -rw-r--r-- | django/db/migrations/writer.py | 11 | ||||
| -rw-r--r-- | docs/releases/1.7.2.txt | 3 | ||||
| -rw-r--r-- | tests/migrations/test_writer.py | 5 |
3 files changed, 16 insertions, 3 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py index 3e4faca833..1e093778a5 100644 --- a/django/db/migrations/writer.py +++ b/django/db/migrations/writer.py @@ -1,10 +1,11 @@ from __future__ import unicode_literals +import collections import datetime -import inspect import decimal -import collections from importlib import import_module +import inspect +import math import os import re import sys @@ -304,7 +305,11 @@ class MigrationWriter(object): elif isinstance(value, SettingsReference): return "settings.%s" % value.setting_name, {"from django.conf import settings"} # Simple types - elif isinstance(value, six.integer_types + (float, bool, type(None))): + elif isinstance(value, float): + if math.isnan(value) or math.isinf(value): + return 'float("{}")'.format(value), set() + return repr(value), set() + elif isinstance(value, six.integer_types + (bool, type(None))): return repr(value), set() elif isinstance(value, six.binary_type): value_repr = repr(value) diff --git a/docs/releases/1.7.2.txt b/docs/releases/1.7.2.txt index eaaf15507a..3d9a74616b 100644 --- a/docs/releases/1.7.2.txt +++ b/docs/releases/1.7.2.txt @@ -49,3 +49,6 @@ Bugfixes * Allowed usage of ``DateTimeField()`` as ``Transform.output_field`` (:ticket:`23420`). + +* Fixed a migration serializing bug involving ``float("nan")`` and + ``float("inf")`` (:ticket:23770:). diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py index f98b2493aa..1dcc8e641a 100644 --- a/tests/migrations/test_writer.py +++ b/tests/migrations/test_writer.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import datetime +import math import os import re import tokenize @@ -69,6 +70,10 @@ class WriterTests(TestCase): """ # Basic values self.assertSerializedEqual(1) + self.assertSerializedEqual(1.2) + self.assertTrue(math.isinf(self.serialize_round_trip(float("inf")))) + self.assertTrue(math.isinf(self.serialize_round_trip(float("-inf")))) + self.assertTrue(math.isnan(self.serialize_round_trip(float("nan")))) self.assertSerializedEqual(None) self.assertSerializedEqual(b"foobar") string, imports = MigrationWriter.serialize(b"foobar") |
