Use importlib for db scripts

pull/133/head
stijndcl 2022-09-20 01:07:36 +02:00
parent 181118aa1d
commit 1fe04b3687
2 changed files with 9 additions and 10 deletions

View File

@ -4,14 +4,10 @@ This is slightly ugly, but running the scripts directly isn't possible because o
This could be cleaned up a bit using importlib but this is safer
"""
import asyncio
import importlib
import sys
from typing import Callable
from database.scripts.db00_example import main as debug_add_courses
script_mapping: dict[str, Callable] = {"debug_add_courses.py": debug_add_courses}
if __name__ == "__main__":
scripts = sys.argv[1:]
if not scripts:
@ -19,10 +15,13 @@ if __name__ == "__main__":
exit(1)
for script in scripts:
script_main = script_mapping.get(script.removeprefix("database/scripts/"), None)
if script_main is None:
print(f'Script "{script}" not found.', file=sys.stderr)
exit(1)
script = script.replace("/", ".").removesuffix(".py")
module = importlib.import_module(script)
try:
script_main: Callable = module.main
asyncio.run(script_main())
print(f"Successfully ran {script}")
except AttributeError:
print(f'Script "{script}" not found.', file=sys.stderr)
exit(1)