示例#1
0
文件: native.py 项目: chris-zen/wok
	def prepare(self, task):
		wok_conf = task.instance.conf.get("wok")
		if wok_conf is None:
			wok_conf = DataElement()

		lang = self.conf.get("language", "python")

		lang_key = "execution.mode.native.{}".format(lang)
		if lang_key in wok_conf:
			lang_conf = wok_conf[lang_key]
		else:
			lang_conf = DataElement()

		if "script_path" not in self.conf:
			raise MissingRequiredOption("script_path")

		script_path = self.conf["script_path"]

		if lang == "python":
			cmd = lang_conf.get("bin", "python")
			args = [self._task_absolute_path(task, script_path)]
			env = self._merge_env(lang_conf.get("env"), self.conf.get("env"))

			if "lib_path" in lang_conf:
				if "PYTHONPATH" in env:
					env["PYTHONPATH"] = ":".join(lang_conf["lib_path"]) + ":" + env["PYTHONPATH"]
				else:
					env["PYTHONPATH"] = ":".join(lang_conf["lib_path"])
		else:
			raise UnknownNativeCmdBuilderLanguage(lang)

		args += ["-D", "instance_name=" + task.instance.name,
				"-D", "module_path=" + ".".join([task.parent.namespace, task.parent.name]),
				"-D", "task_index=" + str(task.index)]

		for key, value in self._storage_conf(task.instance.engine.storage.basic_conf):
			args += ["-D", "storage.{}={}".format(key, value)]

		return cmd, args, env.to_native()