def edit_executor(self): name = click.prompt("Name") if name not in self.executors_dict: click.secho(f"There is no {name} executor", fg="yellow") return new_name = None while new_name is None: new_name = self.check_executors_name("New name", default=name) if new_name != name: value = self.executors_dict[name] self.executors_dict.pop(name) self.executors_dict[new_name] = value name = new_name section = Sections.EXECUTOR_DATA.format(name) repo_executor = self.executors_dict[section].get("repo_executor") if repo_executor: repo_name = re.search(r"(^[a-zA-Z0-9_-]+)(?:\..*)*$", repo_executor).group(1) metadata = executor_metadata(repo_name) process_repo_var_envs(name, metadata) else: cmd = click.prompt("Command to execute", default=self.executors_dict[section]["cmd"]) self.executors_dict[section]["cmd"] = cmd process_var_envs(name) process_params(name) click.secho("Update repository executor finish", fg="green")
def edit_executor(self): name = click.prompt("Name") if name not in self.executors_list: print(f"{Bcolors.WARNING}There is no {name} executor{Bcolors.ENDC}") return new_name = None while new_name is None: new_name = self.check_executors_name("New name", default=name) if new_name != name: for unformatted_section in Wizard.EXECUTOR_SECTIONS: section = unformatted_section.format(new_name) old_section = unformatted_section.format(name) config.instance.add_section(section) for item in config.instance.items(old_section): config.instance.set(section, item[0], item[1]) config.instance.remove_section(old_section) self.executors_list.remove(name) self.executors_list.append(new_name) name = new_name section = Sections.EXECUTOR_DATA.format(name) repo_name = config.instance[section].get("repo_executor", None) if repo_name: metadata = executor_metadata(repo_name) process_repo_var_envs(name, metadata) else: cmd = click.prompt("Command to execute", default=config.instance.get(section, "cmd")) config.instance.set(section, "cmd", cmd) process_var_envs(name) process_params(name) print(f"{Bcolors.OKGREEN}Update repository executor finish" f"{Bcolors.ENDC}")
async def check_cmds(self): if self.repo_name is None: return True metadata = executor_metadata(self.repo_name) if not await check_commands(metadata): logger.info( f"{Bcolors.WARNING}Invalid bash dependency for " f"{Bcolors.BOLD}{self.repo_name}{Bcolors.ENDC}" ) return False else: return True
async def check_cmds(self): if self.repo_executor is None: return True repo_name = re.search(r"(^[a-zA-Z0-9_-]+)(?:\..*)*$", self.repo_executor).group(1) metadata = executor_metadata(repo_name) if not await check_commands(metadata): logger.info(f"{Bcolors.WARNING}Invalid bash dependency for " f"{Bcolors.BOLD}{self.repo_name}{Bcolors.ENDC}") return False else: return True
async def control_base_repo(chosen_option: str) -> Optional[dict]: metadata = executor_metadata(chosen_option) try: if not check_metadata(metadata): click.secho(f"Invalid manifest for: {chosen_option}", fg="yellow") else: if not await check_commands(metadata): print(f"{Bcolors.WARNING}Invalid bash dependency for" f" {Bcolors.BOLD}{chosen_option}{Bcolors.ENDC}" f"") else: return metadata except FileNotFoundError: click.secho(f"Not existent manifest for: {chosen_option}", fg="yellow") return None
def __init__(self, name: str, config): name = name.strip() self.control_config(name, config) self.name = name self.repo_executor = config.get("repo_executor") if self.repo_executor: self.repo_name = re.search(r"(^[a-zA-Z0-9_-]+)(?:\..*)*$", self.repo_executor).group(1) metadata = executor_metadata(self.repo_name) repo_path = executor_folder() / self.repo_executor self.cmd = metadata["cmd"].format(EXECUTOR_FILE_PATH=repo_path) else: self.cmd = config.get("cmd") self.max_size = int(config.get("max_size", 64 * 1024)) self.params = dict(config[Sections.EXECUTOR_PARAMS] ) if Sections.EXECUTOR_PARAMS in config else {} self.varenvs = dict(config[Sections.EXECUTOR_VARENVS] ) if Sections.EXECUTOR_VARENVS in config else {}
def __init__(self, name: str, config): name = name.strip() self.control_config(name, config) self.name = name executor_section = Sections.EXECUTOR_DATA.format(name) params_section = Sections.EXECUTOR_PARAMS.format(name) varenvs_section = Sections.EXECUTOR_VARENVS.format(name) self.repo_name = config[executor_section].get("repo_executor", None) if self.repo_name: metadata = executor_metadata(self.repo_name) repo_path = executor_folder() / self.repo_name self.cmd = metadata["cmd"].format(EXECUTOR_FILE_PATH=repo_path) else: self.cmd = config[executor_section].get("cmd") self.max_size = int(config[executor_section].get("max_size", 64 * 1024)) self.params = dict(config[params_section]) if params_section in config else {} self.params = {key: value.lower() in ["t", "true"] for key, value in self.params.items()} self.varenvs = dict(config[varenvs_section]) if varenvs_section in config else {}
def edit_executor(self): name = click.prompt("Name") if name not in self.executors_list: print( f"{Bcolors.WARNING}There is no {name} executor{Bcolors.ENDC}") return new_name = None while new_name is None: new_name = self.check_executors_name("New name", default=name) if new_name != name: for unformatted_section in Wizard.EXECUTOR_SECTIONS: section = unformatted_section.format(new_name) old_section = unformatted_section.format(name) config.instance.add_section(section) for item in config.instance.items(old_section): config.instance.set(section, item[0], item[1]) config.instance.remove_section(old_section) self.executors_list.remove(name) self.executors_list.append(new_name) name = new_name section = Sections.EXECUTOR_DATA.format(name) repo_name = config.instance[section].get("repo_executor", None) if repo_name: max_buff_size = click.prompt( "Max data sent to server", type=click.IntRange(min=Wizard.MAX_BUFF_SIZE), default=config.instance.get(section, "max_size"), ) config.instance.set(section, "max_size", f"{max_buff_size}") metadata = executor_metadata(repo_name) process_repo_var_envs(name, metadata) else: cmd = click.prompt("Command to execute", default=config.instance.get(section, "cmd")) max_buff_size = click.prompt( "Max data sent to server", type=click.IntRange(min=Wizard.MAX_BUFF_SIZE), default=config.instance.get(section, "max_size"), ) config.instance.set(section, "cmd", cmd) config.instance.set(section, "max_size", f"{max_buff_size}") process_var_envs(name) process_params(name)
def test_no_path_varenv_in_manifests(): folder = executor_folder() modules = [ f"{Path(module).stem}" for module in os.listdir(folder) if re.match(r".*\.py", module) is not None ] error_message = "" for module in modules: try: metadata = executor_metadata(module) if not full_check_metadata(metadata): error_message = f"{error_message}Not all manifest keys in " f"manifest for {module}\n" if "environment_variables" in metadata: if "PATH" in metadata["environment_variables"]: error_message = f"{error_message}Overriding PATH " f"environment variable in {module}\n" except FileNotFoundError: error_message = f"{error_message}Can't found manifest file for " f"{module}\n" assert len(error_message) == 0, error_message