コード例 #1
0
ファイル: __init__.py プロジェクト: Giotoc/ACR
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
コード例 #2
0
ファイル: interpreter.py プロジェクト: Giotoc/ACR
				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)