Commit 7355885e authored by Loic Bistuer's avatar Loic Bistuer
Browse files

[1.7.x] Fixed #23560 -- Fixed MigrationWrite to handle builtin types without imports.

Thanks Tim Graham for the review.

Backport of b23d4741 from master
parent 091289d9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -351,6 +351,9 @@ class MigrationWriter(object):
                    return string, set(imports)
            if hasattr(value, "__module__"):
                module = value.__module__
                if module == six.moves.builtins.__name__:
                    return value.__name__, set()
                else:
                    return "%s.%s" % (module, value.__name__), set(["import %s" % module])
        # Other iterables
        elif isinstance(value, collections.Iterable):
+3 −0
Original line number Diff line number Diff line
@@ -83,3 +83,6 @@ Bugfixes
* Coerced the ``related_name`` model field option to unicode during migration
  generation to generate migrations that work with both Python 2 and 3
  (:ticket:`23455`).

* Fixed ``MigrationWriter`` to handle builtin types without imports
  (:ticket:`23560`).
+5 −0
Original line number Diff line number Diff line
@@ -81,6 +81,11 @@ class WriterTests(TestCase):
        self.assertSerializedEqual(set([2, 3, "eighty"]))
        self.assertSerializedEqual({"lalalala": ["yeah", "no", "maybe"]})
        self.assertSerializedEqual(_('Hello'))
        # Builtins
        self.assertSerializedEqual([list, tuple, dict, set])
        string, imports = MigrationWriter.serialize([list, tuple, dict, set])
        self.assertEqual(string, "[list, tuple, dict, set]")
        self.assertEqual(imports, set())
        # Functions
        with six.assertRaisesRegex(self, ValueError, 'Cannot serialize function: lambda'):
            self.assertSerializedEqual(lambda x: 42)