diff options
-rw-r--r-- | lib/bb/data_smart.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py index 93c1b81ae..1fede8f01 100644 --- a/lib/bb/data_smart.py +++ b/lib/bb/data_smart.py @@ -401,18 +401,20 @@ class DataSmart(MutableMapping): yield key def __iter__(self): - seen = set() - def _keys(d): + def keylist(d): + klist = set() + for key in d: + if key == "_data": + continue + klist.add(key) + if "_data" in d: - for key in _keys(d["_data"]): - yield key + klist |= keylist(d["_data"]) - for key in d: - if key != "_data": - if not key in seen: - seen.add(key) - yield key - return _keys(self.dict) + return klist + + for k in keylist(self.dict): + yield k def __len__(self): return len(frozenset(self)) |