summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2014-07-04 12:48:13 -0400
committerSimon Charette <charette.s@gmail.com>2014-07-04 13:34:20 -0400
commit35c2c3704185dfdf6498ccf625872fa28bd7ece1 (patch)
tree0f08936743d743c8f0de8ab02f6ce61533007a8c /django/db
parent1966054febbb96b713db27513617eabdbd70957b (diff)
Fixed #22943 -- Correctly serialize compiled regexes.
Thanks to antialiasis at gmail dot com for the patch.
Diffstat (limited to 'django/db')
-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)