def delete_by_id(id: int, config: Dict[str, str]): """ Edit the content of an artifact by id. Arguments: id: - the ID (the one you see with kb list) associated to the artifact to delete 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 """ 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: return db.delete_artifact_by_id(conn, artifact_id) category_path = Path(config["PATH_KB_DATA"], artifact.category) try: Path(category_path, artifact.title).unlink() except FileNotFoundError: pass if fs.count_files(category_path) == 0: fs.remove_directory(category_path) print("Artifact {category}/{title} removed!".format( category=artifact.category, title=artifact.title))
def delete(args: Dict[str, str], config: Dict[str, str]): """ Delete a list of artifacts from the kb knowledge base. Arguments: args: - a dictionary containing the following fields: id -> a list of IDs (the ones you see with kb list) associated to the artifacts we want to delete 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 """ initializer.init(config) conn = db.create_connection(config["PATH_KB_DB"]) if args["id"]: for i in args["id"]: artifact_id = history.get_artifact_id(config["PATH_KB_HIST"], i) artifact = db.get_artifact_by_id(conn, artifact_id) if not artifact: continue db.delete_artifact_by_id(conn, artifact_id) category_path = Path(config["PATH_KB_DATA"], artifact.category) Path(category_path, artifact.title).unlink() if fs.count_files(category_path) == 0: fs.remove_directory(category_path) print("Artifact {category}/{title} removed!".format( category=artifact.category, title=artifact.title)) sys.exit(0) # else if a title is specified elif args["title"]: artifacts = db.get_artifacts_by_filter(conn, title=args["title"], category=args["category"], is_strict=True) if len(artifacts) == 1: artifact = artifacts.pop() db.delete_artifact_by_id(conn, artifact.id) print("Artifact {}/{} removed!".format(artifact.category, artifact.title)) else: print( "There is more than one artifact with that title, please specify a category")
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)
def view(args: Dict[str, str], config: Dict[str, str]): """ View an artifact contained in the knowledge base of kb. Arguments: args: - a dictionary containing the following fields: id -> the IDs (the one you see with kb list) associated to the artifact to view title -> the title of the artifact to view category -> the category of the artifact to view editor -> a boolean, if True the file will be opened in a text editor as a temporary file hence the original will not be affected 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 PATH_KB_MARKERS - the file associated to the markers EDITOR - the editor program to call """ # Check initialization initializer.init(config) conn = db.create_connection(config["PATH_KB_DB"]) if args["id"]: artifact_id = history.get_artifact_id( config["PATH_KB_HIST"], args["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 args["editor"]: with tempfile.NamedTemporaryFile() as tmpfname: fs.copy_file(artifact_path, tmpfname.name) call([config["EDITOR"], tmpfname.name]) sys.exit(0) # View File if fs.is_text_file(artifact_path): markers = get_markers(config["PATH_KB_MARKERS"]) color_mode = not args["no_color"] viewer.view(artifact_path, markers, color=color_mode) else: opener.open_non_text_file(artifact_path) elif args["title"]: artifact = db.get_uniq_artifact_by_filter(conn, title=args["title"], category=args["category"], is_strict=True) if artifact: category_path = Path(config["PATH_KB_DATA"], artifact.category) artifact_path = Path(category_path, artifact.title) content = "" if args["editor"]: call([config["EDITOR"], artifact_path]) sys.exit(0) # View File if fs.is_text_file(artifact_path): markers = get_markers(config["PATH_KB_MARKERS"]) color_mode = not args["no_color"] viewer.view(artifact_path, markers, color=color_mode) else: opener.open_non_text_file(artifact_path) else: print( "There is no artifact with that title, please specify a category")