summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/data_smart.py22
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))