summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2014-07-04 12:48:13 -0400
committerAndrew Godwin <andrew@aeracode.org>2014-07-05 16:38:34 -0700
commit2f0cc4f5fbdddbecbd9c2093baf851fd92dbe205 (patch)
tree67c10a0b29c25de19467f79c99f7942ce2074172 /django
parent1f889800d6c3c2989c0f8c12c631967e8e3ce428 (diff)
[1.7.x] Fixed #22943 -- Correctly serialize compiled regexes.
Thanks to antialiasis at gmail dot com for the patch.
Diffstat (limited to 'django')
-rw-r--r--django/db/migrations/writer.py15
1 files changed, 15 insertions, 0 deletions
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)