コード例 #1
0
ファイル: view.py プロジェクト: Giotoc/ACR
 def generate(self, acenv):
     D = acenv.doDebug
     if D:
         acenv.start("View.generate of view: %s", self.name)
     try:
         self.inputSchemas
     except:  # inputs is undefined
         acenv.generations.append({"type": "view", "name": self.name})
         self.transform(acenv)
         return
         # if D: acenv.debug("Executing with env=%s",acenv)
     self.fillInputs(acenv)
     self.fillPosts(acenv)
     self.checkConditions(acenv)
     for action in self.actions:
         if acenv.doRedirect:
             break
         if D:
             acenv.info("\033[92mdefining name='%s'\033[0m", action["name"])
         action_type = action["type"]
         path_set = action.has_key("path")
         if D:
             acenv.info("Checking condition")
         if action.has_key("condition") and not action["condition"].execute(acenv):
             if D:
                 acenv.warning("Condition is not meet")
             if action_type in WRITE_COMMANDS:
                 default = action.get("default")
                 if default:
                     if path_set:
                         if action_type == PUSH:
                             pointer = action["path"].execute(acenv)
                             if type(pointer) is not list:
                                 raise Error("NotArrayError", "Path did not return array in %s." % action["name"])
                             pointer.append(default.execute(acenv))
                             continue
                     getStorage(acenv, "rs")[action["name"]] = default.execute(acenv)
                     # else:
                     # 	getStorage(acenv,"rs")[action["name"]]={
                     # 		"status":"error",
                     # 		"error":"ConditionNotMeet",
                     # 		"message":"Condition was not meet."
                     # 	}
             continue
         if D:
             acenv.info("Condition test passed")
         component = self.app.getComponent(action["component"])
         generation = component.generate(acenv, action["config"])
         if action_type == NODE and type(generation) is dict and not generation.has_key("@status"):
             generation["@status"] = "ok"
             # if not generation:
             # 	raise Error("ComponentError","Component did not return proper value. Please contact component author.")
             # if not action["name"]:
             # 		continue
         if path_set:
             pointer = action["path"].execute(acenv)
             if action_type == PUSH:
                 if type(generation) is Tree:
                     generation.node = pointer
                     generation = generation.execute(acenv)
                 if type(pointer) not in iterators:
                     raise Error("NotArrayError", "Path did not return array %s." % action["name"])
                 if D:
                     acenv.info("Appending %s to %s", generation, action["path"])
                 pointer.append(generation)
             elif action["type"] == SET:
                 acenv.debug("Starting SET with path %s", pointer)
                 if type(pointer) not in iterators + [dict]:
                     raise Error(
                         "NotObjectError", "Path did not return object or array of objects in %s." % action["name"]
                     )
                 typePointer = type(pointer)
                 if typePointer is dict and pointer.get("@status") is not "noData":
                     if type(generation) is Tree:
                         # TODO check if it is necessary
                         generation.node = pointer
                         generation = generation.execute(acenv)
                     if D:
                         acenv.info("Setting %s to %s in %s", action["name"], generation, action["path"])
                     pointer[action["name"]] = generation
                 elif typePointer in iterators:
                     for i in pointer:
                         if type(generation) is Tree:
                             if D:
                                 acenv.debug("Setting current to %s", i)
                             generation.node = i
                             g = generation.execute(acenv)
                         else:
                             g = generation
                         if D:
                             acenv.info("Setting %s to %s in %s", action["name"], g, action["path"])
                         i[action["name"]] = g
                         # 	pointer=generation
         else:
             if type(generation) is Tree:
                 generation = generation.execute(acenv)
             if action["type"] == NODE:
                 if D:
                     acenv.info("Adding node %s with: %s", action["name"], generation)
                 # generation.name=action["name"]
                 # generation.view=self.name
                 acenv.generations[action["name"]] = generation
             elif action["type"] == SET:
                 if D:
                     acenv.info("Setting %s with: %s", action["name"], generation)
                 getStorage(acenv, "rs")[action["name"]] = generation
             else:
                 pointer = getStorage(acenv, "rs")
         if action["type"] == UNSET:
             if type(pointer) not in iterators + [dict]:
                 raise Error(
                     "NotObjectError", "Path did not return object or array of objects in %s." % action["name"]
                 )
             if type(pointer) is dict:
                 try:
                     pointer.pop(action["name"])
                 except:
                     pass
             elif type(pointer) in iterators:
                 for i in pointer:
                     i.pop(action["name"])
     if acenv.output:
         acenv.output.update(self.output)
コード例 #2
0
ファイル: interpreter.py プロジェクト: Giotoc/ACR
						if D: acenv.info("doing standard comparison '%s' is '%s'",fst,snd)
						ret=fst is snd
				if op=="is not":
					if D: acenv.info("'is not' found. Returning %s",not ret)
					return not ret
				else:
					if D: acenv.info("returning '%s' is '%s'='%s'",fst,snd,ret)
					return ret
			elif op=="(literal)":
				fstLetter=node[1][0]
				if fstLetter is "'":
					return node[1][1:-1]
				elif fstLetter.isdigit:
					return int(node[1])
			elif op=="(root)":# this is $
				return getStorage(acenv,node[1])
			elif op=="(node)":# this is !
				if D: acenv.debug("returning node %s",self.node)
				return self.node
			elif op=="(current)":# this is @
				if D: acenv.debug("returning current node %s",self.current)
				return self.current
			elif op=="name":
				return node[1]
			elif op==".":
				fst=node[1]
				if type(fst) is tuple:
					fst=exe(fst)
				typefst=type(fst)
				if D: acenv.debug("left is '%s'",fst)
				if node[2][0]=="*":