From 46f7a315386972be1b040765c242ebc0e471fe73 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 22 Jun 2023 16:37:01 +0700 Subject: [PATCH 1/6] Nested param shall be substituted anywhere in strings --- JsonPreprocessor/CJsonPreprocessor.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 6d654940..391d7f70 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -547,7 +547,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): if re.match('^.*\s*\${\s*', v.lower()): bStringValue = False bNested = True - if re.match("str\(\s*\${.+", v.lower()): + if re.search("str\(\s*\${.+", v.lower()): v = re.sub("str\(\s*(\${.+)\s*\)", "\\1", v) bStringValue = True valueAfterProcessed = self.__nestedParamHandler(v) @@ -558,7 +558,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): ldict = {} exec(sExec, globals(), ldict) if bStringValue: - v = str(ldict['value']) + v = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*)", str(ldict['value']), v) else: v = ldict['value'] except: @@ -590,12 +590,11 @@ def __checkAndUpdateKeyValue(self, sInputStr: str) -> str: Nested param "${abc}['xyz']" -> "str(${abc}['xyz'])" ''' - if re.match("^\s*.*\s*\"\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*\"", sInputStr.lower()): - sInputStr = re.sub("\"(\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*)\"", "\"str(\\1)\"", sInputStr) - sInputStr = re.sub("str\(\"(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*)\"\)", "str(\\1)", sInputStr) - nestedParam = re.sub("^\s*\"str\((.+)\)\"\s*.*$", "\\1", sInputStr) + if re.search("\"\s*[0-9A-Za-z\.\-_]*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z\.\-_]*\s*\"", sInputStr.lower()): + sInputStr = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*)", "str(\\1)", sInputStr) + nestedParam = re.sub("^.*str\((.+)\).*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) - elif re.match("^\s*.*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*", sInputStr.lower()): + elif re.search("\${\s*[0-9A-Za-z\.\-_]+\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*", sInputStr.lower()): sInputStr = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*)", "\"\\1\"", sInputStr) nestedParam = re.sub("^\s*\"(.+)\"\s*.*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) From 217ab21840c3830a99bc74fdaba3eaf003afbfb1 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Fri, 30 Jun 2023 17:46:07 +0700 Subject: [PATCH 2/6] Updated the pattern when detect nested parameters in config file. --- JsonPreprocessor/CJsonPreprocessor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 391d7f70..38705ad7 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -590,7 +590,7 @@ def __checkAndUpdateKeyValue(self, sInputStr: str) -> str: Nested param "${abc}['xyz']" -> "str(${abc}['xyz'])" ''' - if re.search("\"\s*[0-9A-Za-z\.\-_]*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z\.\-_]*\s*\"", sInputStr.lower()): + if re.search("\"\s*[0-9A-Za-z\.\-_\s]*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z\.\-_\s]*\s*\"", sInputStr.lower()): sInputStr = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*)", "str(\\1)", sInputStr) nestedParam = re.sub("^.*str\((.+)\).*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) From 7f599c683e5f90da1edf0e7202d0730a9468c974 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Tue, 4 Jul 2023 19:19:25 +0700 Subject: [PATCH 3/6] Modified pattern to allow some special characters in string value --- JsonPreprocessor/CJsonPreprocessor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 38705ad7..2f8a55b6 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -590,7 +590,7 @@ def __checkAndUpdateKeyValue(self, sInputStr: str) -> str: Nested param "${abc}['xyz']" -> "str(${abc}['xyz'])" ''' - if re.search("\"\s*[0-9A-Za-z\.\-_\s]*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z\.\-_\s]*\s*\"", sInputStr.lower()): + if re.search("\"\s*[0-9A-Za-z@#%&*+=\\:,;,?<>~().\-_\s]*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z@#%&*+=\\:,;,?<>~().\-_\s]*\s*\"", sInputStr.lower()): sInputStr = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*)", "str(\\1)", sInputStr) nestedParam = re.sub("^.*str\((.+)\).*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) From 980d4d30e4e596cebf1ba6b1f96d84cdd85e77e6 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Wed, 5 Jul 2023 18:48:28 +0700 Subject: [PATCH 4/6] Updated pattern and support utf-8 characters --- JsonPreprocessor/CJsonPreprocessor.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 2f8a55b6..4d7088a0 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -558,7 +558,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): ldict = {} exec(sExec, globals(), ldict) if bStringValue: - v = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*)", str(ldict['value']), v) + v = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[+\s*.+\s*\]+)*)", str(ldict['value']), v) else: v = ldict['value'] except: @@ -590,12 +590,14 @@ def __checkAndUpdateKeyValue(self, sInputStr: str) -> str: Nested param "${abc}['xyz']" -> "str(${abc}['xyz'])" ''' - if re.search("\"\s*[0-9A-Za-z@#%&*+=\\:,;,?<>~().\-_\s]*\s*\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z@#%&*+=\\:,;,?<>~().\-_\s]*\s*\"", sInputStr.lower()): - sInputStr = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[+\s*.+\s*\]+)*)", "str(\\1)", sInputStr) + pattern1 = "\"\s*[0-9A-Za-z\u0080-\uFFFF@#%&*+=\\:,;,?<>~().\-_\s]*\s*\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z\u0080-\uFFFF@#%&*+=\\:,;,?<>~().\-_\s]*\s*\"" + pattern2 = "\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*" + if re.search(pattern1, sInputStr.lower()): + sInputStr = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[+\s*.+\s*\]+)*)", "str(\\1)", sInputStr) nestedParam = re.sub("^.*str\((.+)\).*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) - elif re.search("\${\s*[0-9A-Za-z\.\-_]+\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*", sInputStr.lower()): - sInputStr = re.sub("(\${\s*[0-9A-Za-z\.\-_]+\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*)", "\"\\1\"", sInputStr) + elif re.search(pattern2, sInputStr.lower()): + sInputStr = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*)", "\"\\1\"", sInputStr) nestedParam = re.sub("^\s*\"(.+)\"\s*.*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) From c4eabeb63d8ae2c5c8b9ab73f932ba9583726d9f Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 6 Jul 2023 12:58:20 +0700 Subject: [PATCH 5/6] Updated the pattern when handle nested param. --- JsonPreprocessor/CJsonPreprocessor.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 4d7088a0..00a25a7b 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -590,14 +590,14 @@ def __checkAndUpdateKeyValue(self, sInputStr: str) -> str: Nested param "${abc}['xyz']" -> "str(${abc}['xyz'])" ''' - pattern1 = "\"\s*[0-9A-Za-z\u0080-\uFFFF@#%&*+=\\:,;,?<>~().\-_\s]*\s*\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[+\s*.+\s*\]+)*\s*[0-9A-Za-z\u0080-\uFFFF@#%&*+=\\:,;,?<>~().\-_\s]*\s*\"" - pattern2 = "\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*" - if re.search(pattern1, sInputStr.lower()): - sInputStr = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[+\s*.+\s*\]+)*)", "str(\\1)", sInputStr) - nestedParam = re.sub("^.*str\((.+)\).*$", "\\1", sInputStr) - self.lNestedParams.append(nestedParam) - elif re.search(pattern2, sInputStr.lower()): - sInputStr = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*'\s*[0-9A-Za-z\.\-_]+\s*'\s*\])*)", "\"\\1\"", sInputStr) + pattern = "\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*.+\s*\])*" + if re.match("\s*\".+\"\s*", sInputStr.lower()) and re.search("(" + pattern + ")*", sInputStr.lower()): + lNestedParam = re.findall("(" + pattern + ")", sInputStr) + for nestedParam in lNestedParam: + self.lNestedParams.append(nestedParam[0]) + sInputStr = re.sub("(" + pattern + ")", "str(\\1)", sInputStr) + elif re.search(pattern, sInputStr.lower()): + sInputStr = re.sub("(" + pattern + ")", "\"\\1\"", sInputStr) nestedParam = re.sub("^\s*\"(.+)\"\s*.*$", "\\1", sInputStr) self.lNestedParams.append(nestedParam) From c1e18350d21d73630a6904e89cd07f5bdf164fa0 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 6 Jul 2023 19:02:10 +0700 Subject: [PATCH 6/6] Updated nested param handling - allow multi nested params in string. --- JsonPreprocessor/CJsonPreprocessor.py | 159 ++++++++++++++------------ 1 file changed, 85 insertions(+), 74 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 00a25a7b..227760ce 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -334,7 +334,7 @@ def replacer(match): return sContentCleaned - def __nestedParamHandler(self, sInputStr : str) -> str: + def __nestedParamHandler(self, sInputStr : str, bKey = False) -> list: ''' This method handles nested variables in parameter names or values. Variable syntax is ${Variable_Name}. @@ -346,53 +346,13 @@ def __nestedParamHandler(self, sInputStr : str) -> str: **Returns:** - **sStrHandled** (*string*) + **lNestedParam** (*list*) - String which contains the resolved variable. + List of resolved variables which contains in the sInputStr. ''' - - referVars = re.findall('(\${\s*.*?\s*})', sInputStr) - if len(referVars) > 1: - sUpdateVar = referVars[0] - referVars = referVars[1:] - sInputStr = re.sub('\\' + sUpdateVar, '', sInputStr, count=1) - for var in referVars[::-1]: - pattern = '(\\' + var + '\s*\[\s*.*?\s*\])' - variable = re.findall(pattern, sInputStr) - if variable == []: - sExec = "value = " + re.search('^\s*\${(\s*.*?)}', var).group(1) - try: - ldict = {} - exec(sExec, globals(), ldict) - tmpValue = ldict['value'] - except: - raise Exception(f"The variable '{var}' is not available!") - sInputStr = re.sub('\\' + var, tmpValue, sInputStr) if isinstance(tmpValue, str) else \ - re.sub('\\' + var, str(tmpValue), sInputStr) - continue - while variable != []: - fullVariable = variable[0] - pattern = pattern[:-1] + '\[\s*.*?\s*\])' - variable = re.findall(pattern, sInputStr) - if variable != []: - fullVariable = variable[0] - sExec = "value = " + re.sub('\${\s*(.*?)\s*}', '\\1', fullVariable) - try: - ldict = {} - exec(sExec, globals(), ldict) - tmpValue = ldict['value'] - except: - raise Exception(f"The variable '{fullVariable}' is not available!") - pattern = re.sub('\[', '\\[', fullVariable) - pattern = re.sub('\]', '\\]', pattern) - sInputStr = re.sub('\\' + pattern, '\'' + tmpValue + '\'', sInputStr) if isinstance(tmpValue, str) else \ - re.sub('\\' + pattern, '\'' + str(tmpValue) + '\'', sInputStr) - sStrHandled = sUpdateVar + sInputStr - return sStrHandled - - else: - if "." in referVars[0]: - dotdictVariable = re.sub('\${\s*(.*?)\s*}', '\\1', referVars[0]) + def __referVarHandle(referVar : str, sInputStr : str) -> str: + if "." in referVar: + dotdictVariable = re.sub('\${\s*(.*?)\s*}', '\\1', referVar) lDotdictVariable = dotdictVariable.split(".") lParams = self.__handleDotdictFormat(lDotdictVariable, []) sParam = '${' + lParams[0] + '}' @@ -400,13 +360,11 @@ def __nestedParamHandler(self, sInputStr : str) -> str: for item in lParams: sParam = sParam + "['" + item + "']" sInputStr = re.sub('\${\s*([^\}]*)\s*}', sParam, sInputStr) - - referVars = re.findall('(\${\s*.*?\s*})', sInputStr) - - pattern = '(\\' + referVars[0] + '\s*\[\s*.*?\s*\])' + referVar = re.findall('(\${\s*.*?\s*})', sInputStr)[0] + pattern = '(\\' + referVar + '\s*\[\s*.*?\s*\])' variable = re.findall(pattern, sInputStr) if variable == []: - return referVars[0] + return referVar else: fullVariable = variable[0] while variable != []: @@ -414,8 +372,59 @@ def __nestedParamHandler(self, sInputStr : str) -> str: variable = re.findall(pattern, sInputStr) if variable != []: fullVariable = variable[0] - sStrHandled = fullVariable - return sStrHandled + referVar = fullVariable + return referVar + + + pattern = "\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}" + referVars = re.findall("(" + pattern + ")", sInputStr) + lNestedParam = [] + if len(referVars) > 1: + if not bKey: + for referVar in referVars: + lNestedParam.append(__referVarHandle(referVar, sInputStr)) + return lNestedParam + else: + sUpdateVar = referVars[0] + referVars = referVars[1:] + sInputStr = re.sub('\\' + sUpdateVar, '', sInputStr, count=1) + for var in referVars[::-1]: + pattern = '(\\' + var + '\s*\[\s*.*?\s*\])' + variable = re.findall(pattern, sInputStr) + if variable == []: + sExec = "value = " + re.search('^\s*\${(\s*.*?)}', var).group(1) + try: + ldict = {} + exec(sExec, globals(), ldict) + tmpValue = ldict['value'] + except: + raise Exception(f"The variable '{var}' is not available!") + sInputStr = re.sub('\\' + var, tmpValue, sInputStr) if isinstance(tmpValue, str) else \ + re.sub('\\' + var, str(tmpValue), sInputStr) + continue + while variable != []: + fullVariable = variable[0] + pattern = pattern[:-1] + '\[\s*.*?\s*\])' + variable = re.findall(pattern, sInputStr) + if variable != []: + fullVariable = variable[0] + sExec = "value = " + re.sub('\${\s*(.*?)\s*}', '\\1', fullVariable) + try: + ldict = {} + exec(sExec, globals(), ldict) + tmpValue = ldict['value'] + except: + raise Exception(f"The variable '{fullVariable}' is not available!") + pattern = re.sub('\[', '\\[', fullVariable) + pattern = re.sub('\]', '\\]', pattern) + sInputStr = re.sub('\\' + pattern, '\'' + tmpValue + '\'', sInputStr) if isinstance(tmpValue, str) else \ + re.sub('\\' + pattern, '\'' + str(tmpValue) + '\'', sInputStr) + sKeyHandled = sUpdateVar + sInputStr + lNestedParam.append(sKeyHandled) + return lNestedParam + else: + lNestedParam.append(__referVarHandle(referVars[0], sInputStr)) + return lNestedParam def __handleDotdictFormat(self, lInputListParams : list, lParams: list = []) -> list: ''' @@ -511,8 +520,8 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): keyNested = k if re.match("str\(\s*\${.+", k.lower()): k = re.sub("str\(\s*(\${.+)\s*\)", "\\1", k) - keyAfterProcessed = self.__nestedParamHandler(k) - k = re.sub('^\s*\${\s*(.*?)\s*}', '\\1', keyAfterProcessed) + keyAfterProcessed = self.__nestedParamHandler(k, bKey=True) + k = re.sub('^\s*\${\s*(.*?)\s*}', '\\1', keyAfterProcessed[0]) if isinstance(v, dict): v, bNested = self.__updateAndReplaceNestedParam(v, bNested, recursive=True) @@ -527,7 +536,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): item = re.sub("str\(\s*(\${.+)\s*\)", "\\1", item) bStringValue = True itemAfterProcessed = self.__nestedParamHandler(item) - tmpItemAfterProcessed = re.sub('\${\s*(.*?)\s*}', '\\1', itemAfterProcessed) + tmpItemAfterProcessed = re.sub('\${\s*(.*?)\s*}', '\\1', itemAfterProcessed[0]) sExec = "value = " + tmpItemAfterProcessed if isinstance(tmpItemAfterProcessed, str) else \ "value = " + str(tmpItemAfterProcessed) try: @@ -538,7 +547,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): else: item = ldict['value'] except: - raise Exception(f"The variable '{itemAfterProcessed}' is not available!") + raise Exception(f"The variable '{itemAfterProcessed[0]}' is not available!") tmpValue.append(item) v = tmpValue @@ -547,23 +556,25 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): if re.match('^.*\s*\${\s*', v.lower()): bStringValue = False bNested = True - if re.search("str\(\s*\${.+", v.lower()): - v = re.sub("str\(\s*(\${.+)\s*\)", "\\1", v) + pattern = "\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*.+\s*\])*" + if re.search("(str\(\s*" + pattern + "\))", v.lower()): + v = re.sub("str\(\s*(" + pattern + ")\s*\)", "\\1", v) bStringValue = True valueAfterProcessed = self.__nestedParamHandler(v) - tmpValueAfterProcessed = re.sub('\\${\s*(.*?)\s*}', '\\1', valueAfterProcessed) - sExec = "value = " + tmpValueAfterProcessed if isinstance(tmpValueAfterProcessed, str) else \ - "value = " + str(tmpValueAfterProcessed) - try: - ldict = {} - exec(sExec, globals(), ldict) - if bStringValue: - v = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[+\s*.+\s*\]+)*)", str(ldict['value']), v) - else: - v = ldict['value'] - except: - raise Exception(f"The variable '{valueAfterProcessed}' is not available!") - + for valueProcessed in valueAfterProcessed: + tmpValueAfterProcessed = re.sub('\\${\s*(.*?)\s*}', '\\1', valueProcessed) + sExec = "value = " + tmpValueAfterProcessed if isinstance(tmpValueAfterProcessed, str) else \ + "value = " + str(tmpValueAfterProcessed) + try: + ldict = {} + exec(sExec, globals(), ldict) + if bStringValue: + v = re.sub("(\${\s*[0-9A-Za-z_]+[0-9A-Za-z\.\-_]*\s*}(\[\s*.+\s*\])*)", str(ldict['value']), v, count=1) + else: + v = ldict['value'] + except: + raise Exception(f"The variable '{valueProcessed}' is not available!") + if isinstance(v, str) and re.match('^\s*none|true|false\s*$', v.lower()): v = '\"' + v + '\"' @@ -759,13 +770,13 @@ def __handleStrNoneTrueFalse(objJson): # Checking availability of nested parameters before updating and replacing. for param in self.lNestedParams: parseNestedParam = self.__nestedParamHandler(param) - tmpParseNestedParam = re.sub('\\${\s*(.*?)\s*}', '\\1', parseNestedParam) + tmpParseNestedParam = re.sub('\\${\s*(.*?)\s*}', '\\1', parseNestedParam[0]) sExec = "value = " + tmpParseNestedParam if isinstance(tmpParseNestedParam, str) else \ "value = " + str(tmpParseNestedParam) try: ldict = {} exec(sExec, globals(), ldict) except: - raise Exception(f"The variable '{parseNestedParam}' is not available!") + raise Exception(f"The variable '{parseNestedParam[0]}' is not available!") return oJson