Add more flags

This commit is contained in:
XANTRONIX Development 2025-01-10 14:21:41 -05:00
parent a4c3563c17
commit 67e6c385e6

View file

@ -9,37 +9,36 @@ from xenu_nntp.db import Database
from xenu_nntp.newsgroup import Newsgroup
from xenu_nntp.mbox import MBoxReader
class ImportException(Exception):
def __init__(self, path: str, line: int, error: str):
self.path = path
self.line = line
self.error = error
def __str__(self):
return "Error importing %s at line %d: %s" % (
self.path, self.line, self.error
)
class Importer():
def __init__(self, db: Database, newsgroup: Newsgroup, args):
self.db = db
self.newsgroup = newsgroup
self.args = args
def import_mbox_file(db: Database, newsgroup: Newsgroup, mboxfile: str):
def print_error(self, mboxfile: str, reader: MBoxReader, e: Exception):
print(f"Error importing file {mboxfile} on line {reader.line} to newsgroup {self.newsgroup.name}: {e}")
def import_mbox_file(self, mboxfile: str):
if self.args.verbose and not self.args.quiet:
print(f"Importing file {mboxfile}")
reader = MBoxReader(mboxfile)
try:
for message in reader.messages():
if self.args.verbose and not self.args.quiet:
print(f"Importing message {message.id}")
db.add(message)
for message in reader.messages():
if self.args.verbose and not self.args.quiet:
print(f"Importing message {message.message_id} to newsgroup {self.newsgroup.name}")
db.execute(f'insert into newsgroup_message values (%s, %s)',
(newsgroup.id, message.id))
except Exception as e:
raise ImportException(mboxfile, reader.line, str(e))
try:
self.db.add(message)
self.db.execute(f'insert into newsgroup_message values (%s, %s)',
(self.newsgroup.id, message.id))
except Exception as e:
if not self.args.quiet:
self.print_error(mboxfile, reader, e)
if not self.args.ignore_errors:
exit(1)
parser = argparse.ArgumentParser(description='Create new account')
parser.add_argument('--dry-run', action='store_true', help='Do not commit to database')
@ -55,21 +54,12 @@ args = parser.parse_args()
config = Config.load(args.config_file)
db = Database.from_config(config)
newsgroup = db.get(Newsgroup, {'name': args.newsgroup})
importer = Importer(db, newsgroup, args)
db.execute("begin transaction")
for mboxfile in args.mboxfile:
if args.verbose and not args.quiet:
print(f"Importing mbox file {mboxfile}")
try:
import_mbox_file(db, newsgroup, mboxfile)
except ImportException as e:
if not args.quiet:
print(str(e), file=sys.stderr)
if not args.ignore_errors:
exit(1)
importer.import_mbox_file(mboxfile)
if not args.dry_run:
db.commit()