#! /usr/bin/env python3 import sys import argparse import datetime from xenu_nntp.config import Config from xenu_nntp.db import Database from xenu_nntp.newsgroup import Newsgroup 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('command', type=str, help='Name of subcommand') parser.add_argument('args', type=str, nargs='*') args = parser.parse_args() config = Config.load(args.config_file) db = Database.from_config(config) if args.command not in COMMANDS: print(f"Unknown command '{args.command}'", file=sys.stderr) exit(1) exit(COMMANDS[args.command](db, args.args))