def DoCalculation()

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)