alias: add syntax to handle default variable replacement

This commit is contained in:
nemunaire 2017-07-11 07:31:53 +02:00
parent c3f2c89c7c
commit 2334bc502a

View File

@ -76,7 +76,7 @@ def get_variable(name, msg=None):
elif name in context.data.getNode("variables").index: elif name in context.data.getNode("variables").index:
return context.data.getNode("variables").index[name]["value"] return context.data.getNode("variables").index[name]["value"]
else: else:
return "" return None
def list_variables(user=None): def list_variables(user=None):
@ -108,12 +108,12 @@ def set_variable(name, value, creator):
context.save() context.save()
def replace_variables(cnts, msg=None): def replace_variables(cnts, msg):
"""Replace variables contained in the content """Replace variables contained in the content
Arguments: Arguments:
cnt -- content where search variables cnt -- content where search variables
msg -- optional message where pick some variables msg -- Message where pick some variables
""" """
unsetCnt = list() unsetCnt = list()
@ -122,12 +122,12 @@ def replace_variables(cnts, msg=None):
resultCnt = list() resultCnt = list()
for cnt in cnts: for cnt in cnts:
for res in re.findall("\\$\{(?P<name>[a-zA-Z0-9:]+)\}", cnt): for res, name, default in re.findall("\\$\{(([a-zA-Z0-9:]+)(?:-([^}]+))?)\}", cnt):
rv = re.match("([0-9]+)(:([0-9]*))?", res) rv = re.match("([0-9]+)(:([0-9]*))?", name)
if rv is not None: if rv is not None:
varI = int(rv.group(1)) - 1 varI = int(rv.group(1)) - 1
if varI > len(msg.args): if varI >= len(msg.args):
cnt = cnt.replace("${%s}" % res, "", 1) cnt = cnt.replace("${%s}" % res, default, 1)
elif rv.group(2) is not None: elif rv.group(2) is not None:
if rv.group(3) is not None and len(rv.group(3)): if rv.group(3) is not None and len(rv.group(3)):
varJ = int(rv.group(3)) - 1 varJ = int(rv.group(3)) - 1
@ -142,9 +142,10 @@ def replace_variables(cnts, msg=None):
cnt = cnt.replace("${%s}" % res, msg.args[varI], 1) cnt = cnt.replace("${%s}" % res, msg.args[varI], 1)
unsetCnt.append(varI) unsetCnt.append(varI)
else: else:
cnt = cnt.replace("${%s}" % res, get_variable(res), 1) cnt = cnt.replace("${%s}" % res, get_variable(name) or default, 1)
resultCnt.append(cnt) resultCnt.append(cnt)
# Remove used content
for u in sorted(set(unsetCnt), reverse=True): for u in sorted(set(unsetCnt), reverse=True):
msg.args.pop(u) msg.args.pop(u)