Add more flags
This commit is contained in:
parent
a4c3563c17
commit
67e6c385e6
1 changed files with 23 additions and 33 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue