Skip to content

Commit

Permalink
Merge pull request #96 from jayd3e/dict-is-too-liberal
Browse files Browse the repository at this point in the history
Stricter checking for what is allowed as a Mapping object.
  • Loading branch information
mcdonc committed Mar 23, 2013
2 parents 6b3ac39 + 7ccdf50 commit 8d62ca8
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
5 changes: 4 additions & 1 deletion colander/__init__.py
Expand Up @@ -510,7 +510,10 @@ def _get_unknown(self):


def _validate(self, node, value): def _validate(self, node, value):
try: try:
return dict(value) if hasattr(value, 'items'):
return dict(value)
else:
raise TypeError('Does not implement dict-like functionality.')
except Exception as e: except Exception as e:
raise Invalid(node, raise Invalid(node,
_('"${val}" is not a mapping type: ${err}', _('"${val}" is not a mapping type: ${err}',
Expand Down
17 changes: 17 additions & 0 deletions colander/tests/test_colander.py
Expand Up @@ -529,10 +529,27 @@ def test_ctor_good_unknown(self):
def test_deserialize_not_a_mapping(self): def test_deserialize_not_a_mapping(self):
node = DummySchemaNode(None) node = DummySchemaNode(None)
typ = self._makeOne() typ = self._makeOne()

# None
e = invalid_exc(typ.deserialize, node, None) e = invalid_exc(typ.deserialize, node, None)
self.assertTrue( self.assertTrue(
e.msg.interpolate().startswith('"None" is not a mapping type')) e.msg.interpolate().startswith('"None" is not a mapping type'))


# list
e = invalid_exc(typ.deserialize, node, [])
self.assertTrue(
e.msg.interpolate().startswith('"[]" is not a mapping type'))

# str
e = invalid_exc(typ.deserialize, node, "")
self.assertTrue(
e.msg.interpolate().startswith('"" is not a mapping type'))

# tuple
e = invalid_exc(typ.deserialize, node, ())
self.assertTrue(
e.msg.interpolate().startswith('"()" is not a mapping type'))

def test_deserialize_null(self): def test_deserialize_null(self):
import colander import colander
node = DummySchemaNode(None) node = DummySchemaNode(None)
Expand Down

0 comments on commit 8d62ca8

Please sign in to comment.