remove deleted nodes from exports when generating inventory
diff --git a/reclass/core.py b/reclass/core.py
index c962c74..1495a4c 100644
--- a/reclass/core.py
+++ b/reclass/core.py
@@ -166,9 +166,13 @@
original_exports = Parameters(self._storage.get_exports())
exports = copy.deepcopy(original_exports)
original_exports.render_simple()
+ nodes = { key for key in exports.as_dict()}
entities = {}
for n in self._storage.enumerate_nodes():
entities[n] = self._nodeinfo(n, exports)
+ nodes.discard(n)
+ for n in nodes:
+ exports.delete_key(n)
changed = self._update_exports(original_exports, exports)
if changed:
# use brute force: if the exports have changed rerun
diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index f830187..c887dbf 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -73,6 +73,10 @@
def __ne__(self, other):
return not self.__eq__(other)
+ def delete_key(self, key):
+ self._base.pop(key, None)
+ self._unrendered.pop(key, None)
+
def as_dict(self):
return self._base.copy()
diff --git a/reclass/utils/dictpath.py b/reclass/utils/dictpath.py
index c5df56c..8ff037f 100644
--- a/reclass/utils/dictpath.py
+++ b/reclass/utils/dictpath.py
@@ -137,16 +137,20 @@
del self._parts[0]
return self
- def exists_in(self, base):
- container = base
+ def exists_in(self, container):
+ item = container
for i in self._parts:
- if isinstance(container, (dict, list)) and i in container:
- if isinstance(container, dict):
- container = container[i]
- elif isinstance(container, list):
- container = container[int(i)]
- elif i == self._parts[-1]:
- return True
+ if isinstance(item, (dict, list)):
+ if i in item:
+ if isinstance(item, dict):
+ item = item[i]
+ elif isinstance(container, list):
+ item = item[int(i)]
+ else:
+ return False
else:
- return False
+ if item == self._parts[-1]:
+ return True
+ else:
+ return False
return True