diff --git a/colander/__init__.py b/colander/__init__.py index bc6ca22..bfde2c8 100644 --- a/colander/__init__.py +++ b/colander/__init__.py @@ -929,6 +929,10 @@ class Date(object): return value.isoformat() def deserialize(self, node, value): + if not value: + if node.required: + raise Invalid(node, 'Required') + return node.default try: result = iso8601.parse_date(value) result = result.date() diff --git a/colander/tests.py b/colander/tests.py index 8883bfa..573d5f5 100644 --- a/colander/tests.py +++ b/colander/tests.py @@ -1125,6 +1125,21 @@ class TestDate(unittest.TestCase): e = invalid_exc(typ.deserialize, node, '10-10-10-10') self.failUnless('cannot be parsed' in e.msg) + def test_deserialize_empty_required(self): + node = DummySchemaNode(None) + typ = self._makeOne() + e = invalid_exc(typ.deserialize, node, '') + self.failUnless('Required' in e.msg) + + def test_deserialize_empty_notrequired(self): + import datetime + node = DummySchemaNode(None) + node.default = 'abc' + node.required = False + typ = self._makeOne() + result = typ.deserialize(node, None) + self.assertEqual(result, 'abc') + def test_deserialize_success_date(self): import datetime typ = self._makeOne()