Skip to content

Commit

Permalink
loading plugin files from modules
Browse files Browse the repository at this point in the history
  • Loading branch information
faermanj committed Nov 14, 2023
1 parent 55212f3 commit d953659
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 29 deletions.
6 changes: 3 additions & 3 deletions .gitpod.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
tasks:
- name: CLI
init: |
./install_all.sh
- name: UP CLI
init: |
echo "Installed at $(date)"
command: |
./install_all.sh
alias up='poetry run up'
cd upcli
echo "Ready at $(date)"
Expand Down
4 changes: 2 additions & 2 deletions up_splat/up_splat/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from uplib import pm
from up_splat import containers_for_prompt

print("Loading up_splat...")

pm.register(containers_for_prompt)

print("Loaded up_splat.")


3 changes: 1 addition & 2 deletions up_splat/up_splat/splat/create/cluster/oci-standard/up.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,4 @@ env:
- TENANCY_ID
- TENANCY_COMPARTMENT_ID
- ZONE_ID
- AI_OFFLINETOKEN
- PULL_SECRET

7 changes: 6 additions & 1 deletion up_splat/up_splat/up.yaml
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
# here goes some yaml
# here goes some yaml
prompts:
- prompt: "splat create cluster oci-standard"
env:
- AI_OFFLINETOKEN
- PULL_SECRET
1 change: 0 additions & 1 deletion uplib/uplib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
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
5 changes: 1 addition & 4 deletions uplib/uplib/config.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
from dynaconf import Dynaconf
import logging
from . import settings_files

_settings = None
def settings():
global _settings
if not _settings:
_settings = Dynaconf(
environments=True,
envvar_prefix="UP",
settings_files=settings_files
)
load_dotenv=True,)
return _settings

def get_log_level():
Expand Down
1 change: 1 addition & 0 deletions uplib/uplib/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import logging
from .config import get_log_level

TRACE = 5

def init_logging():
sys.set_int_max_str_digits(999999)
Expand Down
6 changes: 3 additions & 3 deletions uplib/uplib/match.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Callable
from .containers import ContainerRun
from .logging import log
from .logging import log, TRACE
from . import Prompt

def does_match(prompt: Prompt, args) -> bool:
Expand All @@ -16,7 +16,7 @@ def if_prompt_matches(mk_run_config: Callable[[], ContainerRun],
if not prompt:
return None
if does_match(prompt, args):
log.debug(f"MATCH: prompt={prompt}, args={args}")
log.log(TRACE ,f"MATCH: prompt={prompt}, args={args}")
return [mk_run_config(prompt)]
log.debug(f"NO MATCH: prompt={prompt}, args={args}")
log.log(TRACE, f"NO MATCH: prompt={prompt}, args={args}")
return None
62 changes: 49 additions & 13 deletions uplib/uplib/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
import pkgutil
import os
import pluggy
import json
from dynaconf import Dynaconf

from . import settings_files
from .containers import Containers
from .hookspecs import containers_for_prompt
from .logging import log
Expand All @@ -12,28 +13,63 @@
def load_plugins(context):
log.info("Loading plugins")
plugin_names = []
settings_files = []
for finder, name, ispkg in pkgutil.iter_modules():
if name.startswith('up_'):
plugin_name = importlib.import_module(name)
plugin_mod = 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))
plugin_path = os.path.dirname(plugin_mod.__file__)
plugin_ok, settings_ok = load_plugin(plugin_mod, plugin_path)
if plugin_ok:
plugin_names.append(plugin_ok)
if settings_ok:
settings_files.append(settings_ok)
log.debug("Discovered %s plugins: %s", len(plugin_names), str(plugin_names))
log.debug("Discovered %s config files: %s", len(settings_files), str(settings_files))
# create a manager and add the spec
# 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, plugin_path):
log.info("Loading plugin %s from %s", plugin_name, plugin_path)
def load_plugin(plugin_name, plugin_dir):
log.debug("Loading plugin %s:%s", plugin_name, plugin_dir)
settings_file = None
try:
plugin_file = plugin_path + "/up.yaml"
file_exists = os.path.isfile(plugin_file)
plugin_file = "up.yaml"
settings_path = plugin_dir + "/" + plugin_file
file_exists = os.path.isfile(settings_path)
if file_exists:
settings_files.append(plugin_file)
log.info("Found up.yaml in plugin %s: %s", plugin_name, plugin_file)
log.debug("Loading settings from %s:%s", plugin_name, settings_path)
settings = load_settings(plugin_name, settings_path)
settings_file = settings_path
else:
log.info("No up.yaml found in plugin %s: %s", plugin_name, plugin_file)
log.debug("No settings file found on %s:%s", plugin_name, plugin_dir)
except Exception as e:
log.error("Error loading plugin %s: %s", plugin_name, str(e))
plugin_name = None
return (plugin_name, settings_file)

def load_settings(plugin_name, settings_path):
env_prefix = prefix_for(plugin_name)
settings = Dynaconf(
load_dotenv=True,
envvar_prefix = env_prefix,
settings_file=settings_path,
)
# Load Environment Variables
prompts = settings.get("prompts", [])
log.info("Loading %s prompts: %s", len(prompts), prompts)

# Load Volumes
# Load Ports
# ...
log.info("Settings loaded "+str(type(settings)))
return settings



def prefix_for(plugin_mod):
plugin_name = plugin_mod.__name__
plugin_name = plugin_name.replace("-", "_")
plugin_name = plugin_name.upper()
return plugin_name

0 comments on commit d953659

Please sign in to comment.