def erase(args: Dict[str, str], config: Dict[str, str]): """ Erase the entire kb knowledge base (or only the database). Arguments: args: - a dictionary containing the following fields: db -> a boolean, if true, only the database will be deleted config: - a configuration dictionary containing at least the following keys: PATH_KB - the main path of KB PATH_KB_DB - the database path of KB PATH_KB_HIST - the history menu path of KB """ if args["db"]: answer = input( "Are you sure you want to erase the kb database ? [YES/NO]") if answer.lower() == "yes": try: fs.remove_file(config["PATH_KB_DB"]) fs.remove_file(config["PATH_KB_HIST"]) print("kb database deleted successfully!") except FileNotFoundError: pass else: answer = input( "Are you sure you want to erase the whole kb knowledge base ? [YES/NO]" ) if answer.lower() == "yes": try: fs.remove_directory(config["PATH_KB"]) print("kb knowledge base deleted successfully!") except FileNotFoundError: pass
def erase_kb(erase_what, config: Dict[str, str]): """ Erase the entire kb knowledge base (or only the database). Arguments: eraseOnlyDB: - a string containing the following fields: if "db", only the database will be deleted config: - a configuration dictionary containing at least the following keys: PATH_KB - the main path of KB PATH_KB_DB - the database path of KB PATH_KB_HIST - the history menu path of KB """ if erase_what == "db": try: fs.remove_file(config["PATH_KB_DB"]) fs.remove_file(config["PATH_KB_HIST"]) response = -200 except FileNotFoundError: response = -404 else: try: fs.remove_directory(config["PATH_KB"]) response = -200 except FileNotFoundError: response = -404 return (response)
def test_remove_file(): filename = Path("tests", "data", "sample_data") with open(filename, 'w') as f: f.write('sample data\n') assert os.path.exists(filename) fs.remove_file(filename) assert not os.path.exists(filename)
def view_by_name(title: str, category: str, config: Dict[str, str], open_editor: bool, color_mode: bool): """ View the content of an artifact by name, that is title/category Arguments: title: - the title assigned to the artifact(s) category: - the category assigned to the artifact(s) config: - a configuration dictionary containing at least the following keys: PATH_KB_DB - the database path of KB PATH_KB_DATA - the data directory of KB PATH_KB_HIST - the history menu path of KB EDITOR - the editor program to call open_editor - a boolean, if True it will open the artifact as a temporary copy in editor color_mode - a boolean, if True the colors on screen will be enabled when printed on stdout """ conn = db.create_connection(config["PATH_KB_DB"]) artifacts = db.get_artifacts_by_filter(conn, title=title, category=category, is_strict=True) if len(artifacts) == 1: artifact = artifacts.pop() category_path = Path(config["PATH_KB_DATA"], artifact.category) artifact_path = Path(category_path, artifact.title) if open_editor: tmpfname = fs.get_temp_filepath() fs.copy_file(artifact_path, tmpfname) shell_cmd = shlex.split(config["EDITOR"]) + [tmpfname] call(shell_cmd) fs.remove_file(tmpfname) sys.exit(0) # View File if fs.is_text_file(artifact_path): markers = get_template(artifact, config) viewer.view(artifact_path, markers, color=color_mode) else: opener.open_non_text_file(artifact_path) elif len(artifacts) > 1: print( "There is more than one artifact with that title, please specify a category" ) else: print( "There is no artifact with that name, please specify a correct artifact name" )
def delete(args: Dict[str, str], config: Dict[str, str]): """ Delete a template from the kb templates. Arguments: args: - a dictionary containing the following fields: template -> the name of the template to remove config: - a configuration dictionary containing at least the following keys: PATH_KB_TEMPLATES - the path to where the templates of KB are stored """ template_name = args["template"] fs.remove_file(Path(config["PATH_KB_TEMPLATES"], template_name))
def view_by_id(id: int, config: Dict[str, str], open_editor: bool, color_mode: bool): """ View the content of an artifact by id. Arguments: id: - the ID (the one you see with kb list) associated to the artifact we want to edit config: - a configuration dictionary containing at least the following keys: PATH_KB_DB - the database path of KB PATH_KB_DATA - the data directory of KB PATH_KB_HIST - the history menu path of KB EDITOR - the editor program to call open_editor - a boolean, if True it will open the artifact as a temporary copy in editor color_mode - a boolean, if True the colors on screen will be enabled when printed on stdout """ conn = db.create_connection(config["PATH_KB_DB"]) artifact_id = history.get_artifact_id(config["PATH_KB_HIST"], id) artifact = db.get_artifact_by_id(conn, artifact_id) if not artifact: sys.exit(1) category_path = Path(config["PATH_KB_DATA"], artifact.category) artifact_path = Path(category_path, artifact.title) if open_editor: tmpfname = fs.get_temp_filepath() fs.copy_file(artifact_path, tmpfname) shell_cmd = shlex.split(config["EDITOR"]) + [tmpfname] call(shell_cmd) fs.remove_file(tmpfname) sys.exit(0) # View File if fs.is_text_file(artifact_path): markers = get_template(artifact, config) viewer.view(artifact_path, markers, color=color_mode) else: opener.open_non_text_file(artifact_path)