Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
faermanj committed Nov 2, 2023
1 parent a486fb5 commit b17834a
Show file tree
Hide file tree
Showing 12 changed files with 48 additions and 51 deletions.
4 changes: 2 additions & 2 deletions up_ansible/up_ansible/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from uplib import pm
from . import run_for_prompt
from . import containers_for_prompt

pm.register(run_for_prompt)
pm.register(containers_for_prompt)
11 changes: 11 additions & 0 deletions up_ansible/up_ansible/containers_for_prompt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import uplib as up

def run_container(prompt):
return up.ContainerRun(
image="cytopia/ansible:latest",
command=prompt)


@up.hookimpl
def containers_for_prompt(prompt):
return up.if_prompt_matches(run_container, prompt, "ansible")
12 changes: 0 additions & 12 deletions up_ansible/up_ansible/run_for_prompt.py

This file was deleted.

4 changes: 2 additions & 2 deletions up_splat/up_splat/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from uplib import pm
from up_splat import run_for_prompt
from up_splat import containers_for_prompt

pm.register(run_for_prompt)
pm.register(containers_for_prompt)
13 changes: 13 additions & 0 deletions up_splat/up_splat/containers_for_prompt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import uplib as up


def create_containers(prompt):
result = up.ContainerRun(
image="fedora",
command=['echo', 'Thanks for trying UP: '] + prompt)
return result

@up.hookimpl
def containers_for_prompt(prompt):
return up.if_prompt_matches(create_containers, prompt, "splat")

13 changes: 0 additions & 13 deletions up_splat/up_splat/run_for_prompt.py

This file was deleted.

11 changes: 5 additions & 6 deletions upcli/up/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
import shlex

from uplib import pm, Context, Prompt
from uplib.containers import Containers, RunConfig
from uplib.containers import Containers, ContainerRun
from uplib.plugins import load_plugins
from uplib.match import match_prompt

containers = Containers()

Expand Down Expand Up @@ -56,19 +55,19 @@ def up(context: Context, prompt: Prompt):
containers.run(run_config)


def run_configs_for_prompt(prompt) -> list[RunConfig]:
def run_configs_for_prompt(prompt) -> list[ContainerRun]:
from_plugins = run_configs_from_plugins(prompt)
from_configs = run_configs_from_dynaconf(prompt)
result = from_plugins + from_configs
return result


def run_configs_from_dynaconf(prompt: list[str]) -> list[RunConfig]:
def run_configs_from_dynaconf(prompt: list[str]) -> list[ContainerRun]:
return []


def run_configs_from_plugins(prompt: list[str]) -> list[RunConfig]:
results = pm.hook.run_for_prompt(prompt=prompt)
def run_configs_from_plugins(prompt: list[str]) -> list[ContainerRun]:
results = pm.hook.containers_for_prompt(prompt=prompt)
result = sum(results, [])
if not result:
result = []
Expand Down
9 changes: 5 additions & 4 deletions uplib/uplib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@
hookimpl = pluggy.HookimplMarker("up")
pm = pluggy.PluginManager("up")

from .match import does_match, match_prompt
from .containers import RunConfig
from .match import does_match, if_prompt_matches
from .containers import ContainerRun, ContainerRuns

__all__ = [Context,
Prompt,
RunConfig,
ContainerRun,
ContainerRuns,
hookspec,
hookimpl,
pm,
does_match,
match_prompt]
if_prompt_matches]
8 changes: 4 additions & 4 deletions uplib/uplib/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# https://docker-py.readthedocs.io/en/stable/containers.html
@dataclass
class RunConfig:
class ContainerRun:
name: str = field(kw_only=True, default="")
image: str = field(kw_only=True, default="")
command: list[str] = field(kw_only=True, default_factory=list)
Expand All @@ -16,11 +16,11 @@ class RunConfig:
auto_remove: bool = field(kw_only=True, default=True)
network_mode: str = field(kw_only=True, default="host")

RunConfigs:TypeAlias = list[RunConfig]
ContainerRuns:TypeAlias = list[ContainerRun]


class DockerContainers:
def run(self, run: RunConfig):
def run(self, run: ContainerRun):
log.debug("Running container: %s", run)
client = docker.from_env()
#TODO: Catch errors, print properly, pass all params
Expand All @@ -44,5 +44,5 @@ def run(self, run: RunConfig):
class Containers:
delegate = DockerContainers()

def run(self, run: RunConfig):
def run(self, run: ContainerRun):
self.delegate.run(run)
6 changes: 2 additions & 4 deletions uplib/uplib/hookspecs.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import pluggy
from . import Prompt, hookspec
from .containers import RunConfigs
from . import hookspec, Prompt, ContainerRuns


@hookspec(firstresult=True)
def run_for_prompt(prompt: Prompt) -> RunConfigs:
def containers_for_prompt(prompt: Prompt) -> ContainerRuns:
"""Present run configurations to execute for prompt"""
6 changes: 3 additions & 3 deletions uplib/uplib/match.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging as log
from . import Prompt
from typing import Callable
from .containers import RunConfig
from .containers import ContainerRun


def does_match(prompt: Prompt, args) -> bool:
Expand All @@ -11,9 +11,9 @@ def does_match(prompt: Prompt, args) -> bool:
return True


def match_prompt(mk_run_config: Callable[[], RunConfig],
def if_prompt_matches(mk_run_config: Callable[[], ContainerRun],
prompt: Prompt,
*args) -> list[RunConfig]:
*args) -> list[ContainerRun]:
if not prompt:
return None
if does_match(prompt, args):
Expand Down
2 changes: 1 addition & 1 deletion uplib/uplib/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from . import hookspec
from .containers import Containers
from .hookspecs import run_for_prompt
from .hookspecs import containers_for_prompt


def load_plugins(context):
Expand Down

0 comments on commit b17834a

Please sign in to comment.