diff options
| author | Simon Charette <charette.s@gmail.com> | 2014-07-04 12:48:13 -0400 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2014-07-05 16:38:34 -0700 |
| commit | 2f0cc4f5fbdddbecbd9c2093baf851fd92dbe205 (patch) | |
| tree | 67c10a0b29c25de19467f79c99f7942ce2074172 /django | |
| parent | 1f889800d6c3c2989c0f8c12c631967e8e3ce428 (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.py | 15 |
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) |
