From 19e8b54a32d4fc4d8a74c2501fdf8f7aa16b9fc3 Mon Sep 17 00:00:00 2001 From: Francia Csaba Date: Thu, 7 Dec 2023 15:57:38 +0100 Subject: [PATCH] Call plugin setup function --- .gitignore | 1 + amarillo/main.py | 42 +++++++++++++++++++++++++++++++++--------- logging.conf | 22 ++++++++++++++++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 logging.conf diff --git a/.gitignore b/.gitignore index 50d0a68..d8d7050 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,5 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +.vscode secrets \ No newline at end of file diff --git a/amarillo/main.py b/amarillo/main.py index 461b8de..2db61f3 100644 --- a/amarillo/main.py +++ b/amarillo/main.py @@ -16,9 +16,6 @@ from fastapi import FastAPI # https://pydantic-docs.helpmanual.io/usage/settings/ # from app.views import home -# from prometheus_fastapi_instrumentator import Instrumentator -# from prometheus_fastapi_instrumentator import metrics as pfi_metrics - logger.info("Hello Amarillo!") app = FastAPI(title="Amarillo - The Carpooling Intermediary", @@ -86,10 +83,37 @@ app = FastAPI(title="Amarillo - The Carpooling Intermediary", # instrumentator.instrument(app) -# def configure(): -# configure_admin_token() -# configure_services() -# configure_routing() +import importlib +import pkgutil + +import amarillo.plugins # FIXME this namespace does not exist if there are 0 plugins installed + + + +def iter_namespace(ns_pkg): + # Source: https://packaging.python.org/guides/creating-and-discovering-plugins/ + return pkgutil.iter_modules(ns_pkg.__path__, ns_pkg.__name__ + ".") + +def load_plugins(): + discovered_plugins = { + name: importlib.import_module(name) + for finder, name, ispkg + in iter_namespace(amarillo.plugins) + } + print(f"Discovered plugins: {list(discovered_plugins.keys())}") + + for name, module in discovered_plugins.items(): + if hasattr(module, "setup"): + print(f"Running setup function for {name}") + module.setup(app) + + else: print(f"Did not find setup function for {name}") + +def configure(): + # configure_admin_token() + # configure_services() + # configure_routing() + load_plugins() # def configure_routing(): @@ -100,8 +124,8 @@ app = FastAPI(title="Amarillo - The Carpooling Intermediary", if __name__ == "__main__": - # configure() + configure() uvicorn.run(app, host="0.0.0.0", port=8000) else: - # configure() + configure() pass diff --git a/logging.conf b/logging.conf new file mode 100644 index 0000000..429da8e --- /dev/null +++ b/logging.conf @@ -0,0 +1,22 @@ +[loggers] +keys=root + +[handlers] +keys=consoleHandler + +[formatters] +keys=simpleFormatter + +[logger_root] +level=INFO +handlers=consoleHandler +propagate=yes + +[handler_consoleHandler] +class=StreamHandler +level=DEBUG +formatter=simpleFormatter +args=(sys.stdout,) + +[formatter_simpleFormatter] +format=%(asctime)s - %(name)s - %(levelname)s - %(message)s \ No newline at end of file