Loading django/db/migrations/writer.py +6 −2 Original line number Diff line number Diff line Loading @@ -206,7 +206,9 @@ class MigrationWriter(object): if isinstance(value, set): format = "set([%s])" elif isinstance(value, tuple): format = "(%s)" if len(value) > 1 else "(%s,)" # When len(value)==0, the empty tuple should be serialized as # "()", not "(,)" because (,) is invalid Python syntax. format = "(%s)" if len(value) != 1 else "(%s,)" else: format = "[%s]" return format % (", ".join(strings)), imports Loading Loading @@ -296,7 +298,9 @@ class MigrationWriter(object): item_string, item_imports = cls.serialize(item) imports.update(item_imports) strings.append(item_string) format = "(%s)" if len(strings) > 1 else "(%s,)" # When len(strings)==0, the empty iterable should be serialized as # "()", not "(,)" because (,) is invalid Python syntax. format = "(%s)" if len(strings) != 1 else "(%s,)" return format % (", ".join(strings)), imports # Uh oh. else: Loading tests/migrations/test_writer.py +12 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,18 @@ class WriterTests(TestCase): ) ) def test_serialize_empty_nonempty_tuple(self): """ Ticket #22679: makemigrations generates invalid code for (an empty tuple) default_permissions = () """ empty_tuple = () one_item_tuple = ('a') many_items_tuple = ('a', 'b', 'c') self.assertSerializedEqual(empty_tuple) self.assertSerializedEqual(one_item_tuple) self.assertSerializedEqual(many_items_tuple) def test_simple_migration(self): """ Tests serializing a simple migration. Loading Loading
django/db/migrations/writer.py +6 −2 Original line number Diff line number Diff line Loading @@ -206,7 +206,9 @@ class MigrationWriter(object): if isinstance(value, set): format = "set([%s])" elif isinstance(value, tuple): format = "(%s)" if len(value) > 1 else "(%s,)" # When len(value)==0, the empty tuple should be serialized as # "()", not "(,)" because (,) is invalid Python syntax. format = "(%s)" if len(value) != 1 else "(%s,)" else: format = "[%s]" return format % (", ".join(strings)), imports Loading Loading @@ -296,7 +298,9 @@ class MigrationWriter(object): item_string, item_imports = cls.serialize(item) imports.update(item_imports) strings.append(item_string) format = "(%s)" if len(strings) > 1 else "(%s,)" # When len(strings)==0, the empty iterable should be serialized as # "()", not "(,)" because (,) is invalid Python syntax. format = "(%s)" if len(strings) != 1 else "(%s,)" return format % (", ".join(strings)), imports # Uh oh. else: Loading
tests/migrations/test_writer.py +12 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,18 @@ class WriterTests(TestCase): ) ) def test_serialize_empty_nonempty_tuple(self): """ Ticket #22679: makemigrations generates invalid code for (an empty tuple) default_permissions = () """ empty_tuple = () one_item_tuple = ('a') many_items_tuple = ('a', 'b', 'c') self.assertSerializedEqual(empty_tuple) self.assertSerializedEqual(one_item_tuple) self.assertSerializedEqual(many_items_tuple) def test_simple_migration(self): """ Tests serializing a simple migration. Loading