From 1fe04b3687ce6ae5d6e61853225eaed92c3bed5a Mon Sep 17 00:00:00 2001 From: stijndcl Date: Tue, 20 Sep 2022 01:07:36 +0200 Subject: [PATCH] Use importlib for db scripts --- database/scripts/db01_initial_easter_eggs.py | 0 run_db_scripts.py | 19 +++++++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 database/scripts/db01_initial_easter_eggs.py diff --git a/database/scripts/db01_initial_easter_eggs.py b/database/scripts/db01_initial_easter_eggs.py new file mode 100644 index 0000000..e69de29 diff --git a/run_db_scripts.py b/run_db_scripts.py index 91f4af2..dbf325f 100644 --- a/run_db_scripts.py +++ b/run_db_scripts.py @@ -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: + 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) - - asyncio.run(script_main()) - print(f"Successfully ran {script}")