def replaceVars(env,l,fn=None): """ l - output of prepareVars fn - function that will be executed on each string """ D=env.doDebug if D: env.start("replaceVars with: path='%s' and fn='%s'", l, fn) try: l.__iter__ except: return l ret=[] for i in l: if type(i) is interpreter.Tree: ret.append(str(i.execute(env))) elif type(i) is tuple: if D: env.debug("computing '%s'",i) storage=getStorage(env,i[0]) v=py2JSON(dicttree.get(storage,i[1],acenv=env)) if v in ("null","false"): continue if fn is not None: if type(v) is unicode: v=v.encode("utf8") v=fn(v) if D: env.debug("adding '%s' to the end of string",v) ret.append(v) else: if D: env.debug("adding '%s' to the end of string",i) if fn is not None: i=fn(i) ret.append(i) if len(ret) is 1 and ret: if D: env.debug("END replaceVars with: %s",ret[0]) return ret[0] try: # ret=filter(map(lambda e: type(e) is unicode and e.encode("utf-8") or e,ret),lambda e:e not in (None,False)) ret=map(lambda e: type(e) is unicode and e.encode("utf-8") or e,ret) if D: env.debug("END replaceVars with: %s","".join(ret)) return "".join(ret) except TypeError,e: if D: env.error("END replaceVars with TypeError: %s; returning %s",e,ret) return ret
elif fnName=="min": args=args[0] if type(args) in NUM_TYPES: return args return min(map(lambda x:type(x) in NUM_TYPES and x or exe(x), args)) elif fnName=="round": return round(*args) elif fnName=="abs": return abs(args[0]) #casting elif fnName=="int": return int(args[0]) elif fnName=="float": return float(args[0]) elif fnName=="str": return str(py2JSON(args[0])) elif fnName in ("list","array"): try: a=args[0] except: return [] targs=type(a) if targs is timeutils.datetime.datetime: return timeutils.date2list(a)+timeutils.time2list(a) if targs is timeutils.datetime.date: return timeutils.date2list(a) if targs is timeutils.datetime.time: return timeutils.time2list(a) if targs is timeutils.datetime.timedelta: return timeutils.timedelta2list(a) return list(a)