code tidy up
diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index fd3e572..576afb0 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -100,17 +100,10 @@
return new
values = cur
- if isinstance(cur, dict):
- value = Value(cur)
- values = Values()
- values.append(value)
- elif isinstance(cur, list):
- value = Value(cur)
- values = Values()
- values.append(value)
+ if isinstance(cur, (dict, list)):
+ values = Values(Value(cur))
elif isinstance(cur, Value):
- values = Values()
- values.append(cur)
+ values = Values(cur)
if isinstance(new, (dict, list)):
new = Value(new)
@@ -306,9 +299,8 @@
value_inner = path_from_ref.get_value(self._base)
self._interpolate_inner(path_from_ref, value_inner, options)
- # all references deferenced and on more references to work out
- # so render value
if value.allRefs():
+ # all references have been deferenced so render value
try:
new = value.render(self._base, options)
if isinstance(new, dict):
@@ -320,7 +312,7 @@
else:
path.set_value(self._base, new)
- # finally, remove the reference from the occurrences cache
+ # remove the reference from the unrendered list
del self._unrendered[path]
except UndefinedVariableError as e:
raise UndefinedVariableError(e.var, path)
diff --git a/reclass/utils/dictitem.py b/reclass/utils/dictitem.py
index 726e3ef..8185d23 100644
--- a/reclass/utils/dictitem.py
+++ b/reclass/utils/dictitem.py
@@ -50,7 +50,7 @@
raise TypeError('allow dict over scalar = False: cannot merge %s onto %s' % (repr(self), repr(item)))
raise TypeError('Cannot merge %s over %s' % (repr(self), repr(item)))
- def render(self, context, options):
+ def render(self, context):
value = {}
for key, item in self._items.iteritems():
value[key] = item
diff --git a/reclass/utils/listitem.py b/reclass/utils/listitem.py
index ec87294..f79212e 100644
--- a/reclass/utils/listitem.py
+++ b/reclass/utils/listitem.py
@@ -36,7 +36,7 @@
def get_references(self):
return self._refs
- def render(self, context, options):
+ def render(self, context):
value = []
for item in self._items:
value.append(item)
diff --git a/reclass/utils/refitem.py b/reclass/utils/refitem.py
index e25d04f..e606e98 100644
--- a/reclass/utils/refitem.py
+++ b/reclass/utils/refitem.py
@@ -6,12 +6,11 @@
from reclass.utils.mergeoptions import MergeOptions
from reclass.utils.dictpath import DictPath
-from reclass.defaults import PARAMETER_INTERPOLATION_DELIMITER
from reclass.errors import UndefinedVariableError
class RefItem(object):
- def __init__(self, items, delimiter=PARAMETER_INTERPOLATION_DELIMITER):
+ def __init__(self, items, delimiter):
self._delimiter = delimiter
self._items = items
self._refs = []
@@ -22,13 +21,12 @@
self._refs = []
self._allRefs = True
value = ''
- options = MergeOptions()
for item in self._items:
if item.has_references():
item.assembleRefs(context)
self._refs.extend(item.get_references())
try:
- value += item.render(context, options)
+ value += item.render(context)
except UndefinedVariableError as e:
self._allRefs = False
if self._allRefs:
@@ -53,14 +51,14 @@
except KeyError as e:
raise UndefinedVariableError(ref)
- def render(self, context, options):
+ def render(self, context):
# Preserve type if only one item
if len(self._items) == 1:
- return self._resolve(self._items[0].render(context, options), context)
+ return self._resolve(self._items[0].render(context), context)
# Multiple items
string = ''
for item in self._items:
- string += str(item.render(context, options))
+ string += str(item.render(context))
return self._resolve(string, context)
def __repr__(self):
diff --git a/reclass/utils/scaitem.py b/reclass/utils/scaitem.py
index 76a2e61..05fc9a2 100644
--- a/reclass/utils/scaitem.py
+++ b/reclass/utils/scaitem.py
@@ -42,7 +42,7 @@
raise TypeError('allow scalar over dict = False: cannot merge %s over %s' % (repr(self), repr(item)))
raise TypeError('Cannot merge %s over %s' % (repr(self), repr(item)))
- def render(self, context, options):
+ def render(self, context):
return self._value
def __repr__(self):
diff --git a/reclass/utils/values.py b/reclass/utils/values.py
index fba09e1..918f75d 100644
--- a/reclass/utils/values.py
+++ b/reclass/utils/values.py
@@ -8,10 +8,12 @@
class Values(object):
- def __init__(self):
+ def __init__(self, value=None):
self._refs = []
self._allRefs = True
self._values = []
+ if value is not None:
+ self._values.append(value)
self.assembleRefs()
def append(self, value):
@@ -56,8 +58,6 @@
def render(self, context, options=None):
from reclass.datatypes.parameters import Parameters
- from reclass.utils.dictitem import DictItem
- from reclass.utils.scaitem import ScaItem
if options is None:
options = MergeOptions()
@@ -74,7 +74,8 @@
output = p1.as_dict()
continue
elif isinstance(output, list) and isinstance(new, list):
- raise TypeError('Cannot merge %s over %s' % (repr(self._values[n]), repr(self._values[n-1])))
+ output.extend(new)
+ continue
elif isinstance(output, (dict, list)) or isinstance(new, (dict, list)):
raise TypeError('Cannot merge %s over %s' % (repr(self._values[n]), repr(self._values[n-1])))
else: