From d0bf0e362df11c1bf74fce3bc80ecd6d95ec8b41 Mon Sep 17 00:00:00 2001 From: Evan Broder Date: Sun, 22 Nov 2009 16:07:29 -0500 Subject: [PATCH] Add an __iter__ method to invirt.common.struct. svn path=/trunk/packages/invirt-base/; revision=2551 --- python/invirt/common.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/python/invirt/common.py b/python/invirt/common.py index f228a33..603b7f3 100644 --- a/python/invirt/common.py +++ b/python/invirt/common.py @@ -12,8 +12,11 @@ class struct(object): 'A simple namespace object.' def __init__(self, d = {}, __prefix = None, **kwargs): 'd is the dictionary or the items-iterable to update my __dict__ with.' - self.__dict__.update(d) - self.__dict__.update(kwargs) + dct = {} + dct.update(d) + dct.update(kwargs) + self.__dict__.update(dct) + self.__keys = set(dct) self.__prefix = __prefix def __getattr__(self, key): # XX ideally these would point a frame higher on the stack. @@ -24,6 +27,9 @@ class struct(object): else: raise AttributeError("anonymous struct has no member '%s'" % (key,)) + def __iter__(self): + for i in self.__keys: + yield i def dicts2struct(x, prefix = None): """ @@ -118,6 +124,7 @@ class common_tests(unittest.TestCase): self.assertEqual(structs.dict.list, dicts['dict']['list']) self.assertEqual(structs.list[0], dicts['list'][0]) self.assertEqual(structs.list[1].key, dicts['list'][1]['key']) + self.assertEqual(set(structs), set(['atom', 'dict', 'list'])) if __name__ == '__main__': unittest.main() -- 1.7.9.5