hist_cmd: implemented '--convert' option
This commit is contained in:
parent
2a8f01aee4
commit
3246944e54
@ -1,13 +1,48 @@
|
|||||||
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from ..configuration import Config
|
from ..configuration import Config
|
||||||
from ..chat import ChatDB
|
from ..chat import ChatDB
|
||||||
from ..message import MessageFilter
|
from ..message import MessageFilter, Message
|
||||||
|
|
||||||
|
|
||||||
def hist_cmd(args: argparse.Namespace, config: Config) -> None:
|
msg_suffix = Message.file_suffix_write
|
||||||
|
|
||||||
|
|
||||||
|
def convert_messages(args: argparse.Namespace, config: Config) -> None:
|
||||||
"""
|
"""
|
||||||
Handler for the 'hist' command.
|
Convert messages to a new format. Also used to change the suffix,
|
||||||
|
to the latest default message file suffix.
|
||||||
|
"""
|
||||||
|
chat = ChatDB.from_dir(Path(config.cache),
|
||||||
|
Path(config.db))
|
||||||
|
# read all known message files
|
||||||
|
msgs = chat.msg_gather(loc='disk', glob='*.*')
|
||||||
|
# make a set of all message IDs
|
||||||
|
msg_ids = set([m.msg_id() for m in msgs])
|
||||||
|
# set requested format and write all messages
|
||||||
|
chat.set_msg_format(args.convert)
|
||||||
|
chat.msg_write(msgs)
|
||||||
|
# read all messages with the current default suffix
|
||||||
|
msgs = chat.msg_gather(loc='disk', glob='*{msg_suffix}')
|
||||||
|
# make sure we converted all of the original messages
|
||||||
|
for mid in msg_ids:
|
||||||
|
if not any(mid == m.msg_id() for m in msgs):
|
||||||
|
print(f"Message '{mid}' has not been found after conversion. Aborting.")
|
||||||
|
sys.exit(1)
|
||||||
|
# delete messages with old suffix
|
||||||
|
msgs = chat.msg_gather(loc='disk', glob='*.*')
|
||||||
|
for m in msgs:
|
||||||
|
if m.file_path and m.file_path.suffix != msg_suffix:
|
||||||
|
m.rm_file()
|
||||||
|
print(f"Successfully converted {len(msg_ids)} messages.")
|
||||||
|
if len(msgs):
|
||||||
|
print(f"Deleted {len(msgs)} messages with deprecated suffixes.")
|
||||||
|
|
||||||
|
|
||||||
|
def print_chat(args: argparse.Namespace, config: Config) -> None:
|
||||||
|
"""
|
||||||
|
Print the DB chat history.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
mfilter = MessageFilter(tags_or=args.or_tags,
|
mfilter = MessageFilter(tags_or=args.or_tags,
|
||||||
@ -21,3 +56,13 @@ def hist_cmd(args: argparse.Namespace, config: Config) -> None:
|
|||||||
chat.print(args.source_code_only,
|
chat.print(args.source_code_only,
|
||||||
args.with_tags,
|
args.with_tags,
|
||||||
args.with_files)
|
args.with_files)
|
||||||
|
|
||||||
|
|
||||||
|
def hist_cmd(args: argparse.Namespace, config: Config) -> None:
|
||||||
|
"""
|
||||||
|
Handler for the 'hist' command.
|
||||||
|
"""
|
||||||
|
if args.print:
|
||||||
|
print_chat(args, config)
|
||||||
|
elif args.convert:
|
||||||
|
convert_messages(args, config)
|
||||||
|
|||||||
@ -73,17 +73,20 @@ def create_parser() -> argparse.ArgumentParser:
|
|||||||
|
|
||||||
# 'hist' command parser
|
# 'hist' command parser
|
||||||
hist_cmd_parser = cmdparser.add_parser('hist', parents=[tag_parser],
|
hist_cmd_parser = cmdparser.add_parser('hist', parents=[tag_parser],
|
||||||
help="Print chat history.",
|
help="Print and manage chat history.",
|
||||||
aliases=['h'])
|
aliases=['h'])
|
||||||
hist_cmd_parser.set_defaults(func=hist_cmd)
|
hist_cmd_parser.set_defaults(func=hist_cmd)
|
||||||
|
hist_group = hist_cmd_parser.add_mutually_exclusive_group(required=True)
|
||||||
|
hist_group.add_argument('-p', '--print', help='Print the DB chat history', action='store_true')
|
||||||
|
hist_group.add_argument('-c', '--convert', help='Convert all message files to the given format [txt|yaml]', metavar='FORMAT')
|
||||||
hist_cmd_parser.add_argument('-w', '--with-tags', help="Print chat history with tags.",
|
hist_cmd_parser.add_argument('-w', '--with-tags', help="Print chat history with tags.",
|
||||||
action='store_true')
|
action='store_true')
|
||||||
hist_cmd_parser.add_argument('-W', '--with-files', help="Print chat history with filenames.",
|
hist_cmd_parser.add_argument('-W', '--with-files', help="Print chat history with filenames.",
|
||||||
action='store_true')
|
action='store_true')
|
||||||
hist_cmd_parser.add_argument('-S', '--source-code-only', help='Only print embedded source code',
|
hist_cmd_parser.add_argument('-S', '--source-code-only', help='Only print embedded source code',
|
||||||
action='store_true')
|
action='store_true')
|
||||||
hist_cmd_parser.add_argument('-A', '--answer', help='Search for answer substring', metavar='SUBSTRING')
|
hist_cmd_parser.add_argument('-A', '--answer', help='Print only answers with given substring', metavar='SUBSTRING')
|
||||||
hist_cmd_parser.add_argument('-Q', '--question', help='Search for question substring', metavar='SUBSTRING')
|
hist_cmd_parser.add_argument('-Q', '--question', help='Print only questions with given substring', metavar='SUBSTRING')
|
||||||
|
|
||||||
# 'tags' command parser
|
# 'tags' command parser
|
||||||
tags_cmd_parser = cmdparser.add_parser('tags',
|
tags_cmd_parser = cmdparser.add_parser('tags',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user