def apply_on_set(args: Dict[str, str], config: Dict[str, str]): """ Apply the specified template to all the filtered artifacts """ # Check initialization initializer.init(config) tags_list = None if args["tags"] and args["tags"] != "": tags_list = args["tags"].split(';') conn = db.create_connection(config["PATH_KB_DB"]) is_query_strict = not args["extended_match"] rows = db.get_artifacts_by_filter(conn, title=args["title"], category=args["category"], tags=tags_list, status=args["status"], author=args["author"], is_strict=is_query_strict) for artifact in rows: updated_artifact = Artifact(id=artifact.id, title=artifact.title, category=artifact.category, tags=artifact.tags, author=artifact.author, status=artifact.status, template=args["template"]) db.update_artifact_by_id(conn, artifact.id, updated_artifact)
def update_artifact(conn, old_artifact: Artifact, args: Dict[str, str], config: Dict[str, str], attachment): """ Update artifact properties within the knowledge base of kb. Arguments: old_artifact: - an object of type Artifact containing the old artifact details args: - a dictionary containing the following fields: id -> an id of an artifact - note - the ACTUAL db_id title -> the title to be assigned to the artifact to update category -> the category to be assigned to the artifact to update tags -> the tags to be assigned to the artifact to update author -> the author to be assigned to the artifact to update status -> the status to be assigned to the artifact to update template -> the template to be assigned to the artifact to update 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 attachment: - new file content """ initializer.init(config) template_name = args.get("template", "") updated_artifact = Artifact( id=None, title=args.get("title", old_artifact.title), category=args.get("category", old_artifact.category), tags=args.get("tags", old_artifact.tags), author=args.get("author", old_artifact.author), status=args.get("status", old_artifact.status), template=args.get("template", old_artifact.template), path=args.get("category", old_artifact.category) + '/' + args.get("title", old_artifact.title) ) db.update_artifact_by_id(conn, old_artifact.id, updated_artifact) # If either title or category has been changed, we must move the file if args["category"] or args["title"]: old_category_path = Path( config["PATH_KB_DATA"], old_artifact.category) new_category_path = Path( config["PATH_KB_DATA"], args["category"] or old_artifact.category) fs.create_directory(new_category_path) fs.move_file(Path(old_category_path, old_artifact.title), Path( new_category_path, args["title"] or old_artifact.title)) return -200
def update(args: Dict[str, str], config: Dict[str, str]): """ Update artifact properties within the knowledge base of kb. Arguments: args: - a dictionary containing the following fields: id -> a list of IDs (the ones you see with kb list) associated to the artifact to update title -> the title to be assigned to the artifact to update category -> the category to be assigned to the artifact to update tags -> the tags to be assigned to the artifact to update author -> the author to be assigned to the artifact to update status -> the status to be assigned to the artifact to update template -> the template to be assigned to the artifact to update edit_content -> a boolean, if True -> also open the artifact to edit the content 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 """ initializer.init(config) conn = db.create_connection(config["PATH_KB_DB"]) # if an ID is specified, load artifact with that ID if args["id"]: old_artifact = history.get_artifact(conn, config["PATH_KB_HIST"], args["id"]) if not old_artifact: print("The artifact you are trying to update does not exist! " "Please insert a valid ID...") return None updated_artifact = Artifact(id=None, title=args["title"], category=args["category"], tags=args["tags"], author=args["author"], status=args["status"], template=args["template"]) db.update_artifact_by_id(conn, old_artifact.id, updated_artifact) # If either title or category has been changed, we must move the file if args["category"] or args["title"]: old_category_path = Path(config["PATH_KB_DATA"], old_artifact.category) new_category_path = Path(config["PATH_KB_DATA"], args["category"] or old_artifact.category) fs.create_directory(new_category_path) fs.move_file( Path(old_category_path, old_artifact.title), Path(new_category_path, args["title"] or old_artifact.title)) # else if a title is specified elif args["title"]: artifact = db.get_uniq_artifact_by_filter(conn, title=args["title"], category=args["category"], author=args["author"], status=args["status"], is_strict=True) if artifact: category_path = Path(config["PATH_KB_DATA"], artifact.category) else: print( "There is none or more than one artifact with that title, please specify a category" ) if args["edit_content"] or args["body"]: if args["title"]: artifact_path = str(Path(category_path, artifact.title)) shell_cmd = shlex.split(config["EDITOR"]) + [artifact_path] elif args["id"]: artifact_path = str( Path(config["PATH_KB_DATA"]) / old_artifact.category / old_artifact.title) shell_cmd = shlex.split(config["EDITOR"]) + [artifact_path] if args["body"]: args["body"] = args["body"].replace("\\n", "\n") with open(artifact_path, 'w') as art_file: art_file.write(args["body"]) else: call(shell_cmd)