diff options
| author | Simon Charette <charette.s@gmail.com> | 2014-07-04 12:48:13 -0400 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2014-07-04 13:34:20 -0400 |
| commit | 35c2c3704185dfdf6498ccf625872fa28bd7ece1 (patch) | |
| tree | 0f08936743d743c8f0de8ab02f6ce61533007a8c /django/db | |
| parent | 1966054febbb96b713db27513617eabdbd70957b (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.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) |
