forked from Hay1tsme/artemis
72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
import argparse
|
|
import os
|
|
from os import path
|
|
import yaml
|
|
import asyncio
|
|
|
|
import core.logger
|
|
from core.data import Data
|
|
from core.config import CoreConfig
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Database utilities")
|
|
parser.add_argument(
|
|
"--config", "-c", type=str, help="Config folder to use", default="config"
|
|
)
|
|
parser.add_argument(
|
|
"--version",
|
|
"-v",
|
|
type=str,
|
|
help="Version of the database to upgrade/rollback to",
|
|
)
|
|
parser.add_argument("--email", "-e", type=str, help="Email for the new user")
|
|
parser.add_argument("--access_code", "-a", type=str, help="Access code for new/transfer user", default="00000000000000000000")
|
|
parser.add_argument("--message", "-m", type=str, help="Revision message")
|
|
parser.add_argument("action", type=str, help="create, upgrade, downgrade, create-owner, migrate, create-revision, create-autorevision")
|
|
args = parser.parse_args()
|
|
|
|
cfg = CoreConfig()
|
|
if path.exists(f"{args.config}/core.yaml"):
|
|
cfg_dict = yaml.safe_load(open(f"{args.config}/core.yaml"))
|
|
cfg_dict.get("database", {})["loglevel"] = "info"
|
|
cfg.update(cfg_dict)
|
|
|
|
os.environ["ARTEMIS_CFG_DIR"] = args.config
|
|
|
|
core.logger.init_root_logger(cfg)
|
|
|
|
data = Data(cfg)
|
|
database_logger = core.logger.create_logger("Database", cfg.database.loglevel)
|
|
|
|
if args.action == "create":
|
|
data.create_database()
|
|
|
|
elif args.action == "upgrade":
|
|
data.schema_upgrade(args.version)
|
|
|
|
elif args.action == "downgrade":
|
|
if not args.version:
|
|
database_logger.error("Version argument required for downgrade")
|
|
exit(1)
|
|
data.schema_downgrade(args.version)
|
|
|
|
elif args.action == "create-owner":
|
|
loop = asyncio.get_event_loop()
|
|
loop.run_until_complete(data.create_owner(args.email, args.access_code))
|
|
|
|
elif args.action == "migrate":
|
|
loop = asyncio.get_event_loop()
|
|
loop.run_until_complete(data.migrate())
|
|
|
|
elif args.action == "create-revision":
|
|
loop = asyncio.get_event_loop()
|
|
loop.run_until_complete(data.create_revision(args.message))
|
|
|
|
elif args.action == "create-autorevision":
|
|
loop = asyncio.get_event_loop()
|
|
loop.run_until_complete(data.create_revision_auto(args.message))
|
|
|
|
else:
|
|
database_logger.info(f"Unknown action {args.action}")
|