diff --git a/test_typedcols.py b/test_typedcols.py index 9e73062e5aeb2620027eaf96be6c3ec9edb3ea72..0f09924a187cde5db6d1a825059cb8239ab92de7 100755 --- a/test_typedcols.py +++ b/test_typedcols.py @@ -134,6 +134,16 @@ class TestTypedDict(unittest.TestCase): ("note", None) ]) + def testSetDefaultNonexistent(self): + res = self.person.setdefault("tel", "1234") + self.assertEqual(res, 1234) + self.assertEqual(self.person["tel"], 1234) + + def testSetDefaultExistent(self): + res = self.person.setdefault("age", "50") + self.assertEqual(res, 34) + self.assertEqual(self.person["age"], 34) + class IntList(TypedList): item_type = int diff --git a/typedcols.py b/typedcols.py index 5c3468d3d994eb2807f3fd1f20c36ca2e54f13a2..328b27afaff7a336c802fde928c6781fd7b648dd 100644 --- a/typedcols.py +++ b/typedcols.py @@ -201,6 +201,15 @@ class TypedDict(MutableMapping): del self.data[key] self.initItemDefault(key) + def setdefault(self, key, default=None): + """ Return coerced value instead of original """ + try: + return self[key] + except KeyError: + self[key] = default + return self[key] + + # Following definitions are not strictly necessary as MutableMapping # already defines them, however we can override them by calling to # possibly more optimized underlying implementations.