summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Holtermann <info@markusholtermann.eu>2014-01-22 09:06:06 +0100
committerMarkus Holtermann <info@markusholtermann.eu>2014-01-22 09:21:54 +0100
commit047394f79c2cbc6cf44684a1f0d17aba1ddfe1c8 (patch)
tree5f689dfc07cb2af968d5a58c76986421556bc3dd
parent088cb711fe8c8bfb6af04ac7ef094817802c4256 (diff)
Fixed #21852 -- Make migration writer serialize iterators
-rw-r--r--django/db/migrations/writer.py11
-rw-r--r--tests/migrations/test_writer.py7
2 files changed, 18 insertions, 0 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py
index 355ad3d90e..da56d0c171 100644
--- a/django/db/migrations/writer.py
+++ b/django/db/migrations/writer.py
@@ -3,6 +3,7 @@ from __future__ import unicode_literals
import datetime
import inspect
import decimal
+import collections
from importlib import import_module
import os
import types
@@ -257,6 +258,16 @@ class MigrationWriter(object):
if hasattr(value, "__module__"):
module = value.__module__
return "%s.%s" % (module, value.__name__), set(["import %s" % module])
+ # Other iterables
+ elif isinstance(value, collections.Iterable):
+ imports = set()
+ strings = []
+ for item in value:
+ item_string, item_imports = cls.serialize(item)
+ imports.update(item_imports)
+ strings.append(item_string)
+ format = "(%s)" if len(strings) > 1 else "(%s,)"
+ return format % (", ".join(strings)), imports
# Uh oh.
else:
raise ValueError("Cannot serialize: %r\nThere are some values Django cannot serialize into migration files.\nFor more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing" % value)
diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py
index 8856e8fbb3..5934f8cf47 100644
--- a/tests/migrations/test_writer.py
+++ b/tests/migrations/test_writer.py
@@ -102,6 +102,13 @@ class WriterTests(TestCase):
set(["from django.conf import settings"]),
)
)
+ self.assertSerializedResultEqual(
+ ((x, x*x) for x in range(3)),
+ (
+ "((0, 0), (1, 1), (2, 4))",
+ set(),
+ )
+ )
def test_simple_migration(self):
"""