From ce3c2d00ff6768e07ac99406549452431439faf1 Mon Sep 17 00:00:00 2001 From: Allan Caffee Date: Mon, 2 Jun 2014 16:49:00 -0700 Subject: [PATCH] DictField: Allow None to be used as a default --- jsonmapper/__init__.py | 18 +++++++++++++++--- setup.py | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/jsonmapper/__init__.py b/jsonmapper/__init__.py index 3a1d88c..96cbd88 100644 --- a/jsonmapper/__init__.py +++ b/jsonmapper/__init__.py @@ -331,10 +331,22 @@ class DictField(Field): >>> blog.post.author.name u'John Doe' + >>> class Blog(Mapping): + ... post = DictField(Post, default=None) + + >>> blog = Blog() + >>> blog.post is None + True + """ - def __init__(self, mapping=None, name=None, default=None): - default = default or {} - Field.__init__(self, name=name, default=lambda: default.copy()) + def __init__(self, mapping=None, name=None, default=DEFAULT): + if default is DEFAULT: + default = {} + elif callable(getattr(default, 'copy', None)): + default = default.copy + else: + default = default + Field.__init__(self, name=name, default=default) self.mapping = mapping def _to_python(self, value): diff --git a/setup.py b/setup.py index b280be1..5b1e0e1 100755 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ setup( name = 'JSONMapper', - version = '0.1', + version = '0.2', description = '', long_description = '', author = 'Matt Good',