Further flesh out xenu-nntp-group
This commit is contained in:
parent
d19da96838
commit
4b06d43b88
1 changed files with 65 additions and 19 deletions
|
@ -1,5 +1,6 @@
|
|||
#! /usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import datetime
|
||||
|
||||
|
@ -7,22 +8,23 @@ from xenu_nntp.config import Config
|
|||
from xenu_nntp.db import Database
|
||||
from xenu_nntp.newsgroup import Newsgroup
|
||||
|
||||
parser = argparse.ArgumentParser(description='Create new account')
|
||||
parser.add_argument('--config-file', '-f', type=str, help='Specify a configuration file location')
|
||||
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 = parser.parse_args(args)
|
||||
|
||||
if args.created_on is None:
|
||||
args.created_on = datetime.datetime.now(datetime.UTC).isoformat()
|
||||
|
||||
config = Config.load(args.config_file)
|
||||
db = Database.from_config(config)
|
||||
|
||||
newsgroup = Newsgroup()
|
||||
newsgroup.name = args.name
|
||||
newsgroup.description = args.description
|
||||
|
@ -33,3 +35,47 @@ 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))
|
||||
|
|
Loading…
Add table
Reference in a new issue