Further flesh out xenu-nntp-group

This commit is contained in:
XANTRONIX Development 2025-01-10 18:28:37 -05:00
parent d19da96838
commit 4b06d43b88

View file

@ -1,5 +1,6 @@
#! /usr/bin/env python3 #! /usr/bin/env python3
import sys
import argparse import argparse
import datetime import datetime
@ -7,29 +8,74 @@ from xenu_nntp.config import Config
from xenu_nntp.db import Database from xenu_nntp.db import Database
from xenu_nntp.newsgroup import Newsgroup from xenu_nntp.newsgroup import Newsgroup
parser = argparse.ArgumentParser(description='Create new account') def create(db: Database, args: list[str]):
parser = argparse.ArgumentParser(
description = 'Create new newsgroup',
prog = '%s create' % sys.argv[0]
)
parser.add_argument('--created-on', type=str, help='Specify creation date of newsgroup')
parser.add_argument('--created-by', type=str, required=True, help='Print messages when importing files and messages')
parser.add_argument('--description', type=str, required=True, help='Newsgroup topic summary')
parser.add_argument('--writable', action='store_true', help='Specify whether group is writable')
parser.add_argument('name', type=str, help='Name of newsgroup to create')
args = parser.parse_args(args)
if args.created_on is None:
args.created_on = datetime.datetime.now(datetime.UTC).isoformat()
newsgroup = Newsgroup()
newsgroup.name = args.name
newsgroup.description = args.description
newsgroup.created_on = datetime.datetime.fromisoformat(args.created_on)
newsgroup.created_by = args.created_by
newsgroup.writable = args.writable or False
db.execute("begin transaction")
db.add(newsgroup)
db.commit()
return 0
def delete(db: Database, args: list[str]):
parser = argparse.ArgumentParser(
description = 'Delete newsgroup',
prog = '%s delete' % sys.argv[0]
)
parser.add_argument('name', type=str, help='Name of newsgroup to delete')
args = parser.parse_args(args)
newsgroup = db.get(Newsgroup, {'name': args.name})
if newsgroup is None:
print(f"Unable to find newsgroup '{args.name}'", file=sys.stderr)
return 1
db.execute('delete from newsgroup_message where newsgroup_id = %s', (newsgroup.id,))
db.execute('delete from newsgroup where id = %s', (newsgroup.id,))
return 0
COMMANDS = {
'create': create,
'delete': delete
}
parser = argparse.ArgumentParser(description='Manage newsgroups')
parser.add_argument('--config-file', '-f', type=str, help='Specify a configuration file location') parser.add_argument('--config-file', '-f', type=str, help='Specify a configuration file location')
parser.add_argument('--created-on', type=str, help='Specify creation date of newsgroup') parser.add_argument('command', type=str, help='Name of subcommand')
parser.add_argument('--created-by', type=str, required=True, help='Print messages when importing files and messages') parser.add_argument('args', type=str, nargs='*')
parser.add_argument('--description', type=str, required=True, help='Newsgroup topic summary')
parser.add_argument('--writable', action='store_true', help='Specify whether group is writable')
parser.add_argument('name', type=str, help='Name of newsgroup to create')
args = parser.parse_args() args = parser.parse_args()
if args.created_on is None:
args.created_on = datetime.datetime.now(datetime.UTC).isoformat()
config = Config.load(args.config_file) config = Config.load(args.config_file)
db = Database.from_config(config) db = Database.from_config(config)
newsgroup = Newsgroup() if args.command not in COMMANDS:
newsgroup.name = args.name print(f"Unknown command '{args.command}'", file=sys.stderr)
newsgroup.description = args.description exit(1)
newsgroup.created_on = datetime.datetime.fromisoformat(args.created_on)
newsgroup.created_by = args.created_by
newsgroup.writable = args.writable or False
db.execute("begin transaction") exit(COMMANDS[args.command](db, args.args))
db.add(newsgroup)
db.commit()