tidy up value items
diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index 3af80ff..baa92c3 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -222,7 +222,7 @@
def _render_simple_container(self, container, key, value, path, options):
if isinstance(value, ValueList):
- if value.has_references() or value.has_exports():
+ if value.is_complex():
self._unrendered[path.new_subpath(key)] = True
return
else:
@@ -236,7 +236,7 @@
self._render_simple_list(value, path.new_subpath(key), options)
container[key] = value
elif isinstance(value, Value):
- if value.has_references() or value.has_exports():
+ if value.is_complex():
self._unrendered[path.new_subpath(key)] = True
else:
container[key] = value.render(None, None, options)
diff --git a/reclass/utils/compitem.py b/reclass/utils/compitem.py
index 12845f7..a49dfea 100644
--- a/reclass/utils/compitem.py
+++ b/reclass/utils/compitem.py
@@ -4,8 +4,9 @@
# This file is part of reclass
#
+from reclass.utils.item import Item
-class CompItem(object):
+class CompItem(Item):
def __init__(self, items):
self._items = items
@@ -35,9 +36,6 @@
def get_references(self):
return self._refs
- def has_exports(self):
- return False
-
def render(self, context, exports):
# Preserve type if only one item
if len(self._items) == 1:
diff --git a/reclass/utils/dictitem.py b/reclass/utils/dictitem.py
index 1782e70..f652059 100644
--- a/reclass/utils/dictitem.py
+++ b/reclass/utils/dictitem.py
@@ -4,48 +4,16 @@
# This file is part of reclass
#
-class DictItem(object):
+from reclass.utils.item import Item
+
+class DictItem(Item):
def __init__(self, item):
self._dict = item
- self._refs = []
- self._allRefs = False
- self.assembleRefs()
-
- def assembleRefs(self, context={}):
- self._refs = []
- self._allRefs = True
- self._assembleRefs_recurse_dict(self._dict)
-
- def _assembleRefs_recurse_dict(self, items):
- from reclass.utils.value import Value
- from reclass.utils.valuelist import ValueList
-
- for key, item in items.iteritems():
- if isinstance(item, dict):
- self._assembleRefs_recurse_dict(item)
- continue
- if isinstance(item, (Value, ValueList)) and item.has_references():
- for ref in item.get_references():
- self._refs.append(ref)
- if not item.allRefs():
- self._allRefs = False
def contents(self):
return self._dict
- def allRefs(self):
- return self._allRefs
-
- def has_references(self):
- return len(self._refs) > 0
-
- def has_exports(self):
- return False
-
- def get_references(self):
- return self._refs
-
def merge_over(self, item, options):
from reclass.utils.scaitem import ScaItem
diff --git a/reclass/utils/expitem.py b/reclass/utils/expitem.py
index fe2bf31..3798165 100644
--- a/reclass/utils/expitem.py
+++ b/reclass/utils/expitem.py
@@ -5,9 +5,10 @@
#
from reclass.utils.dictpath import DictPath
+from reclass.utils.item import Item
from reclass.errors import UndefinedVariableError
-class ExpItem(object):
+class ExpItem(Item):
def __init__(self, items, delimiter):
self._delimiter = delimiter
@@ -16,9 +17,6 @@
def contents(self):
return self._items
- def has_references(self):
- return False
-
def has_exports(self):
return True
diff --git a/reclass/utils/item.py b/reclass/utils/item.py
new file mode 100644
index 0000000..035f3fb
--- /dev/null
+++ b/reclass/utils/item.py
@@ -0,0 +1,25 @@
+#
+# -*- coding: utf-8 -*-
+#
+# This file is part of reclass
+#
+
+from reclass.utils.dictpath import DictPath
+from reclass.errors import UndefinedVariableError
+
+class Item(object):
+
+ def __init__(self):
+ return
+
+ def allRefs(self):
+ return True
+
+ def has_references(self):
+ return False
+
+ def has_exports(self):
+ return False
+
+ def is_complex():
+ return (self.has_references | self.has_exports)
diff --git a/reclass/utils/listitem.py b/reclass/utils/listitem.py
index d80ebc9..a1c66bc 100644
--- a/reclass/utils/listitem.py
+++ b/reclass/utils/listitem.py
@@ -4,42 +4,16 @@
# This file is part of reclass
#
-class ListItem(object):
+from reclass.utils.item import Item
+
+class ListItem(Item):
def __init__(self, item):
self._list = item
- self._refs = []
- self._allRefs = False
- self.assembleRefs()
-
- def assembleRefs(self, context={}):
- from reclass.utils.value import Value
- from reclass.utils.valuelist import ValueList
-
- self._refs = []
- self._allRefs = True
- for item in self._list:
- if isinstance(item, (Value, ValueList)) and item.has_references():
- for ref in item.get_references():
- self._refs.append(ref)
- if not item.allRefs():
- self._allRefs = False
def contents(self):
return self._list
- def allRefs(self):
- return self._allRefs
-
- def has_references(self):
- return len(self._refs) > 0
-
- def has_exports(self):
- return False
-
- def get_references(self):
- return self._refs
-
def render(self, context, exports):
return self._list
diff --git a/reclass/utils/refitem.py b/reclass/utils/refitem.py
index 7f1f759..9e3b2d2 100644
--- a/reclass/utils/refitem.py
+++ b/reclass/utils/refitem.py
@@ -5,9 +5,10 @@
#
from reclass.utils.dictpath import DictPath
+from reclass.utils.item import Item
from reclass.errors import UndefinedVariableError
-class RefItem(object):
+class RefItem(Item):
def __init__(self, items, delimiter):
self._delimiter = delimiter
@@ -40,9 +41,6 @@
def has_references(self):
return len(self._refs) > 0
- def has_exports(self):
- return False
-
def get_references(self):
return self._refs
diff --git a/reclass/utils/scaitem.py b/reclass/utils/scaitem.py
index 421afdc..6748945 100644
--- a/reclass/utils/scaitem.py
+++ b/reclass/utils/scaitem.py
@@ -6,30 +6,16 @@
from reclass.utils.dictitem import DictItem
from reclass.utils.listitem import ListItem
+from reclass.utils.item import Item
-class ScaItem(object):
+class ScaItem(Item):
def __init__(self, value):
self._value = value
- def assembleRefs(self, context={}):
- return
-
- def allRefs(self):
- return True
-
- def has_references(self):
- return False
-
- def has_exports(self):
- return False
-
def contents(self):
return self._value
- def merge_over_with_context(self, item, context, options):
- pass
-
def merge_over(self, item, options):
if isinstance(item, ScaItem):
return self
diff --git a/reclass/utils/value.py b/reclass/utils/value.py
index 65dbe8d..d3ea13b 100644
--- a/reclass/utils/value.py
+++ b/reclass/utils/value.py
@@ -172,6 +172,9 @@
def has_exports(self):
return self._item.has_exports()
+ def is_complex(self):
+ return (self.has_references() | self.has_exports())
+
def get_references(self):
return self._refs
diff --git a/reclass/utils/valuelist.py b/reclass/utils/valuelist.py
index 29d6d68..b630a04 100644
--- a/reclass/utils/valuelist.py
+++ b/reclass/utils/valuelist.py
@@ -36,6 +36,9 @@
def has_exports(self):
return self._has_exports
+ def is_complex(self):
+ return (self.has_references() | self.has_exports())
+
def get_references(self):
return self._refs