diff options
| author | Loic Bistuer <loic.bistuer@sixmedia.com> | 2013-10-19 00:14:01 +0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-10-19 12:10:18 -0400 |
| commit | 8d6953d55c3aba04bbaf0f268499d6e405c653ff (patch) | |
| tree | 4efe24777591fb1d71c62a104b246818af8b5de8 | |
| parent | 584110417f6a3c16cc0c6723825a21940a9a2bc4 (diff) | |
Added support for serializing class methods. - Refs #21290.
The new handling allows us to do away with the whitelisting that was
required to support date and datetime objects.
| -rw-r--r-- | django/db/migrations/writer.py | 15 | ||||
| -rw-r--r-- | tests/migrations/test_writer.py | 2 |
2 files changed, 5 insertions, 12 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py index 333f39d6e0..0ee737811d 100644 --- a/django/db/migrations/writer.py +++ b/django/db/migrations/writer.py @@ -148,18 +148,9 @@ class MigrationWriter(object): return cls.serialize_deconstructed(path, args, kwargs) # Functions elif isinstance(value, (types.FunctionType, types.BuiltinFunctionType)): - # Special-cases, as these don't have im_class - special_cases = [ - (datetime.datetime.now, "datetime.datetime.now", ["import datetime"]), - (datetime.datetime.utcnow, "datetime.datetime.utcnow", ["import datetime"]), - (datetime.date.today, "datetime.date.today", ["import datetime"]), - ] - for func, string, imports in special_cases: - if func == value: # For some reason "utcnow is not utcnow" - return string, set(imports) - # Method? - if hasattr(value, "im_class"): - klass = value.im_class + # @classmethod? + if getattr(value, "__self__", None) and isinstance(value.__self__, type): + klass = value.__self__ module = klass.__module__ return "%s.%s.%s" % (module, klass.__name__, value.__name__), set(["import %s" % module]) elif hasattr(value, 'deconstruct'): diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py index dbee0d1130..3e6fe50793 100644 --- a/tests/migrations/test_writer.py +++ b/tests/migrations/test_writer.py @@ -73,6 +73,8 @@ class WriterTests(TestCase): # Datetime stuff self.assertSerializedEqual(datetime.datetime.utcnow()) self.assertSerializedEqual(datetime.datetime.utcnow) + self.assertSerializedEqual(datetime.datetime.today()) + self.assertSerializedEqual(datetime.datetime.today) self.assertSerializedEqual(datetime.date.today()) self.assertSerializedEqual(datetime.date.today) # Django fields |
