in render-wallboard.py [0:0]
def DoCalculation(WallboardName, Reference):
global Logger,Data,Calculations
Result = "0" # All values are stored as strings when they come out of DDB
#
# Split the calculation based on mathemetical operators
#
CalcArray = re.split("(\+|\*|\-|\/|\(|\))", Calculations[WallboardName][Reference])
# Substitute in the values for the labels in the calculation
#
Index = 0
for Index in range(0, len(CalcArray)):
if CalcArray[Index] in string.punctuation: continue
if CalcArray[Index][0] in string.digits: continue
if CalcArray[Index] in Data:
CalcArray[Index] = Data[CalcArray[Index]]
else:
Logger.warning("Calc: Could not find reference "+CalcArray[Index])
CalcArray[Index] = "0"
CalcString = "".join(CalcArray)
Logger.debug("Calculation for "+Reference+": "+Calculations[WallboardName][Reference]+" -> "+CalcString)
try:
Result = str(eval(CalcString))
except Exception as e:
Logger.error("Could not eval "+Reference+" ["+Calculations[WallboardName][Reference]+"] -> ["+CalcString+"] "+str(e))
return(Result)