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()