Skip to content

Commit

Permalink
loading of config files from modules
Browse files Browse the repository at this point in the history
  • Loading branch information
faermanj committed Nov 14, 2023
1 parent d523f7a commit 55212f3
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 28 deletions.
2 changes: 2 additions & 0 deletions uplib/uplib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
Prompt: TypeAlias = list[str]


# TODO: Consider moving all globals to a single object
hookspec = pluggy.HookspecMarker("up")
hookimpl = pluggy.HookimplMarker("up")
pm = pluggy.PluginManager("up")
settings_files = []

from .match import does_match, if_prompt_matches
from .containers import ContainerRun, ContainerRuns
Expand Down
17 changes: 12 additions & 5 deletions uplib/uplib/config.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
from dynaconf import Dynaconf
import logging
from . import settings_files

settings = Dynaconf(
envvar_prefix="UP",
settings_files=['settings.toml', '.secrets.toml']
)
_settings = None
def settings():
global _settings
if not _settings:
_settings = Dynaconf(
environments=True,
envvar_prefix="UP",
settings_files=settings_files
)
return _settings

def get_log_level():
level_name = settings.get("log_level", "INFO")
level_name = settings().get("log_level", "INFO")
level = logging.getLevelName(level_name)
return level

Expand Down
47 changes: 24 additions & 23 deletions uplib/uplib/plugins.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,39 @@
import importlib
import pkgutil
import os
import pluggy

from . import hookspec
from . import settings_files
from .containers import Containers
from .hookspecs import containers_for_prompt
from .logging import log


def load_plugins(context):
log.info("Loading plugins")
discovered_plugins = {
name: importlib.import_module(name)
for finder, name, ispkg
in pkgutil.iter_modules()
if name.startswith('up_')
}
# for each plugin, seach its contents for all configuration files named up.yaml
plugin_names = discovered_plugins.keys()
for plugin_name in plugin_names:
load_plugin(plugin_name)
plugin_names = []
for finder, name, ispkg in pkgutil.iter_modules():
if name.startswith('up_'):
plugin_name = importlib.import_module(name)
plugin_names.append(name)
plugin_path = os.path.dirname(plugin_name.__file__)
load_plugin(plugin_name, plugin_path)
log.info("Discovered %s plugins: %s", len(plugin_names), str(plugin_names))
log.info("Discovered %s config files: %s", len(settings_files), str(settings_files))
# create a manager and add the spec
# pm.load_setuptools_entrypoints("up")
# pm.add_hookspecs(hookspec)
# log.debug("Plugins loaded.")
# log.debug(str(pm.get_plugins()))
# TODO: Check if this is needed pm.load_setuptools_entrypoints("up")
# TODO: Check if this is needed pm.add_hookspecs(hookspec)


def load_plugin(plugin_name):
log.info("Loading plugin %s", plugin_name)
def load_plugin(plugin_name, plugin_path):
log.info("Loading plugin %s from %s", plugin_name, plugin_path)
try:
cfg = pkgutil.get_data(plugin_name, "up.yaml")
except FileNotFoundError:
log.info("No up.yaml found in plugin %s", plugin_name)
cfg = None
if cfg:
print(str(cfg))
plugin_file = plugin_path + "/up.yaml"
file_exists = os.path.isfile(plugin_file)
if file_exists:
settings_files.append(plugin_file)
log.info("Found up.yaml in plugin %s: %s", plugin_name, plugin_file)
else:
log.info("No up.yaml found in plugin %s: %s", plugin_name, plugin_file)
except Exception as e:
log.error("Error loading plugin %s: %s", plugin_name, str(e))

0 comments on commit 55212f3

Please sign in to comment.