fix: escape braces

This commit is contained in:
debugtalk
2019-04-18 15:37:55 +08:00
parent 2342bcade8
commit 5f33cbfd28
2 changed files with 17 additions and 5 deletions

View File

@@ -458,11 +458,15 @@ class LazyString(object):
"""
self._args = []
def escape_braces(origin_string):
return origin_string.replace("{", "{{").replace("}", "}}")
try:
match_start_position = raw_string.index("$", 0)
self._string = raw_string[0:match_start_position]
begin_string = raw_string[0:match_start_position]
self._string = escape_braces(begin_string)
except ValueError:
self._string = raw_string
self._string = escape_braces(raw_string)
return
while match_start_position < len(raw_string):
@@ -518,9 +522,7 @@ class LazyString(object):
# break while loop
match_start_position = len(raw_string)
remain_string = remain_string.replace("{", "{{")
remain_string = remain_string.replace("}", "}}")
self._string += remain_string
self._string += escape_braces(remain_string)
def __repr__(self):
return "LazyString({})".format(self.raw_string)

View File

@@ -305,6 +305,16 @@ class TestParserBasic(unittest.TestCase):
self.assertEqual(var._args, ["var_1"])
self.assertEqual(var.to_value(variables_mapping), "ABCabc{")
var = parser.LazyString("{ABC$var_1{}a}", functions_mapping, check_variables_set)
self.assertEqual(var._string, "{{ABC{}{{}}a}}")
self.assertEqual(var._args, ["var_1"])
self.assertEqual(var.to_value(variables_mapping), "{ABCabc{}a}")
var = parser.LazyString("AB{C$var_1{}a}", functions_mapping, check_variables_set)
self.assertEqual(var._string, "AB{{C{}{{}}a}}")
self.assertEqual(var._args, ["var_1"])
self.assertEqual(var.to_value(variables_mapping), "AB{Cabc{}a}")
# }
var = parser.LazyString("ABC$var_1}", functions_mapping, check_variables_set)
self.assertEqual(var._string, "ABC{}}}")