Files
dibbler/dibbler/main.py
2026-02-05 00:41:06 +09:00

85 lines
1.9 KiB
Python

import argparse
import sys
from pathlib import Path
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from dibbler.conf import config_db_string, load_config
parser = argparse.ArgumentParser()
parser.add_argument(
"-c",
"--config",
help="Path to the config file",
type=Path,
metavar="FILE",
required=False,
)
parser.add_argument(
"-V",
"--version",
help="Show program version",
action="store_true",
default=False,
)
subparsers = parser.add_subparsers(
title="subcommands",
dest="subcommand",
)
subparsers.add_parser("loop", help="Run the dibbler loop")
subparsers.add_parser("create-db", help="Create the database")
subparsers.add_parser("slabbedasker", help="Find out who is slabbedasker")
subparsers.add_parser("seed-data", help="Fill with mock data")
def main() -> None:
args = parser.parse_args()
if args.version:
from ._version import commit_id, version
print(f"Dibbler version {version}, commit {commit_id if commit_id else '<unknown>'}")
return
if not args.subcommand:
parser.print_help()
sys.exit(1)
load_config(args.config)
engine = create_engine(config_db_string())
sql_session = Session(
engine,
expire_on_commit=False,
autocommit=False,
autoflush=False,
close_resets_only=True,
)
if args.subcommand == "loop":
import dibbler.subcommands.loop as loop
loop.main(sql_session)
elif args.subcommand == "create-db":
import dibbler.subcommands.makedb as makedb
makedb.main(engine)
elif args.subcommand == "slabbedasker":
import dibbler.subcommands.slabbedasker as slabbedasker
slabbedasker.main(sql_session)
elif args.subcommand == "seed-data":
import dibbler.subcommands.seed_test_data as seed_test_data
seed_test_data.main(sql_session)
if __name__ == "__main__":
main()