speed up value parsing: only use pyparsing when needed
diff --git a/reclass/values/value.py b/reclass/values/value.py
index ec09f81..f90eded 100644
--- a/reclass/values/value.py
+++ b/reclass/values/value.py
@@ -92,7 +92,7 @@
content = pp.Combine(pp.OneOrMore(ref_not_open + exp_not_open + text))
string = pp.MatchFirst([double_escape, ref_escape_open, exp_escape_open, content, white_space]).setParseAction(_string)
- item = pp.MatchFirst([reference, export, string])
+ item = reference | export | string
line = pp.OneOrMore(item) + pp.StringEnd()
return line
@@ -104,15 +104,19 @@
self._allRefs = False
self._container = False
if isinstance(val, str):
- try:
- tokens = Value._parser.leaveWhitespace().parseString(val).asList()
- except pp.ParseException as e:
- raise ParseError(e.msg, e.line, e.col, e.lineno)
- items = self._createItems(tokens)
- if len(items) is 1:
- self._item = items[0]
+ if '$' in val:
+ # speed up: only use pyparsing if there is a $ in the string
+ try:
+ tokens = Value._parser.leaveWhitespace().parseString(val).asList()
+ except pp.ParseException as e:
+ raise ParseError(e.msg, e.line, e.col, e.lineno)
+ items = self._createItems(tokens)
+ if len(items) is 1:
+ self._item = items[0]
+ else:
+ self._item = CompItem(items)
else:
- self._item = CompItem(items)
+ self._item = ScaItem(val)
elif isinstance(val, list):
self._item = ListItem(val)
self._container = True