From 35c2c3704185dfdf6498ccf625872fa28bd7ece1 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Fri, 4 Jul 2014 12:48:13 -0400 Subject: Fixed #22943 -- Correctly serialize compiled regexes. Thanks to antialiasis at gmail dot com for the patch. --- django/db/migrations/writer.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'django') diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py index 68f3eb50ce..dbeaae184c 100644 --- a/django/db/migrations/writer.py +++ b/django/db/migrations/writer.py @@ -6,6 +6,7 @@ import decimal import collections from importlib import import_module import os +import re import sys import types @@ -17,6 +18,9 @@ from django.utils.encoding import force_text from django.utils.functional import Promise +COMPILED_REGEX_TYPE = type(re.compile('')) + + class SettingsReference(str): """ Special subclass of string which actually references a current settings @@ -344,6 +348,17 @@ class MigrationWriter(object): # "()", not "(,)" because (,) is invalid Python syntax. format = "(%s)" if len(strings) != 1 else "(%s,)" return format % (", ".join(strings)), imports + # Compiled regex + elif isinstance(value, COMPILED_REGEX_TYPE): + imports = set(["import re"]) + regex_pattern, pattern_imports = cls.serialize(value.pattern) + regex_flags, flag_imports = cls.serialize(value.flags) + imports.update(pattern_imports) + imports.update(flag_imports) + args = [regex_pattern] + if value.flags: + args.append(regex_flags) + return "re.compile(%s)" % ', '.join(args), 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) -- cgit v1.3