[1.7.x] Fixed #23560 -- Fixed MigrationWrite to handle builtin types without imports.
Thanks Tim Graham for the review.
Backport of b23d47412c
from master
This commit is contained in:
parent
091289d950
commit
7355885ef5
|
@ -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):
|
||||
|
|
|
@ -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`).
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue