Skip to content

Commit

Permalink
Merge pull request #10 from JarbasHiveMind/release-0.4.0a1
Browse files Browse the repository at this point in the history
Release 0.4.0a1
  • Loading branch information
JarbasAl authored Dec 31, 2024
2 parents a3e57d2 + 10d86ea commit 595b3ca
Show file tree
Hide file tree
Showing 6 changed files with 154 additions and 8 deletions.
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Changelog

## [0.3.0a1](https://github.com/JarbasHiveMind/hivemind-plugin-manager/tree/0.3.0a1) (2024-12-29)
## [0.4.0a1](https://github.com/JarbasHiveMind/hivemind-plugin-manager/tree/0.4.0a1) (2024-12-30)

[Full Changelog](https://github.com/JarbasHiveMind/hivemind-plugin-manager/compare/0.2.0...0.3.0a1)
[Full Changelog](https://github.com/JarbasHiveMind/hivemind-plugin-manager/compare/0.3.0...0.4.0a1)

**Merged pull requests:**

- feat: get\_class factory methods [\#7](https://github.com/JarbasHiveMind/hivemind-plugin-manager/pull/7) ([JarbasAl](https://github.com/JarbasAl))
- feat:tui [\#9](https://github.com/JarbasHiveMind/hivemind-plugin-manager/pull/9) ([JarbasAl](https://github.com/JarbasAl))



Expand Down
2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include requirements.txt
include LICENSE.md
139 changes: 139 additions & 0 deletions hivemind_plugin_manager/tui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import json
import os.path
from typing import List

import click
from hivemind_plugin_manager import find_plugins, HiveMindPluginTypes
from json_database import JsonStorageXDG
from ovos_utils.xdg_utils import xdg_config_home, xdg_data_home

_DEFAULT = {
"agent_protocol": {"module": "hivemind-ovos-agent-plugin",
"hivemind-ovos-agent-plugin": {
"host": "127.0.0.1",
"port": 8181
}},
"binary_protocol": {"module": None},
"network_protocol": {"module": "hivemind-websocket-plugin",
"hivemind-websocket-plugin": {
"host": "0.0.0.0",
"port": 5678,
"ssl": False,
"cert_dir": f"{xdg_data_home()}/hivemind",
"cert_name": "hivemind"
}},
"database": {"module": "hivemind-json-db-plugin",
"hivemind-json-db-plugin": {
"name": "clients",
"subfolder": "hivemind-core"
}}
}

mapping = {
HiveMindPluginTypes.BINARY_PROTOCOL: "binary_protocol",
HiveMindPluginTypes.AGENT_PROTOCOL: "agent_protocol",
HiveMindPluginTypes.NETWORK_PROTOCOL: "network_protocol",
HiveMindPluginTypes.DATABASE: "database"
}


def cast_to_enum(plugin_type: str) -> HiveMindPluginTypes:
if plugin_type == "network":
plugin_type = HiveMindPluginTypes.NETWORK_PROTOCOL
elif plugin_type == "agent":
plugin_type = HiveMindPluginTypes.AGENT_PROTOCOL
elif plugin_type == "binary":
plugin_type = HiveMindPluginTypes.BINARY_PROTOCOL
elif plugin_type == "database":
plugin_type = HiveMindPluginTypes.DATABASE
else:
raise ValueError("invalid plugin type")
return plugin_type


def get_server_config() -> JsonStorageXDG:
"""from ~/.config/hivemind-core/server.json """
db = JsonStorageXDG("server",
xdg_folder=xdg_config_home(),
subfolder="hivemind-core")
# create file if it doesnt exist
if not os.path.isfile(db.path):
db.merge(_DEFAULT)
db.store()
# ensure no missing top level values
for k in [_ for _ in _DEFAULT if _ not in db]:
db[k] = _DEFAULT[k]
return db


# Initialize the configuration
config = get_server_config()


def list_plugins(plugin_type: str) -> List[str]:
"""Find all plugins of the specified type."""
return list(find_plugins(HiveMindPluginTypes(plugin_type)))


@click.group()
def cli():
"""A TUI for managing HiveMind configuration."""
pass


@cli.command("list")
@click.argument("plugin_type", type=click.Choice(["network", "agent", "binary", "database"]))
def list_plugins_command(plugin_type):
"""List available plugins of the given type. Valid: "network", "agent", "binary", "database" """
if plugin_type not in ["network", "agent", "binary", "database"]:
click.echo(f"Invalid plugin type: {plugin_type}", err=True)
return
plugin_type = cast_to_enum(plugin_type)
plugins = list_plugins(plugin_type)
click.echo(json.dumps(plugins, indent=2))


@cli.command("set")
@click.argument("plugin_type", type=click.Choice(["network", "agent", "binary", "database"]))
@click.argument("plugin_name")
def set_plugin(plugin_type, plugin_name):
"""Set the plugin for a specific type. Valid: "network", "agent", "binary", "database" """
if plugin_type not in ["network", "agent", "binary", "database"]:
click.echo(f"Invalid plugin type: {plugin_type}", err=True)
return

plugin_type = cast_to_enum(plugin_type)

available_plugins = list_plugins(plugin_type)
if plugin_name not in available_plugins:
click.echo(f"Plugin '{plugin_name}' not available for '{plugin_type}'.", err=True)
return

config[mapping[plugin_type]]["module"] = plugin_name
config.store()
click.echo(f"Set {plugin_type} to {plugin_name}.")


@cli.command("get")
@click.argument("plugin_type", type=click.Choice(["network", "agent", "binary", "database"]))
def get_plugin(plugin_type):
"""Get the current plugin for a specific type. Valid: "network", "agent", "binary", "database" """
if plugin_type not in ["network", "agent", "binary", "database"]:
click.echo(f"Invalid plugin type: {plugin_type}", err=True)
return
plugin_type = cast_to_enum(plugin_type)
key = mapping[plugin_type]
if key in config and "module" in config[key]:
click.echo(config[plugin_type]["module"])
else:
click.echo(f"No plugin set for {plugin_type}.")


@cli.command("show-config")
def show_config():
"""Show the full configuration."""
click.echo(json.dumps(config, indent=2, ensure_ascii=False, sort_keys=True))


if __name__ == "__main__":
cli()
4 changes: 2 additions & 2 deletions hivemind_plugin_manager/version.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# START_VERSION_BLOCK
VERSION_MAJOR = 0
VERSION_MINOR = 3
VERSION_MINOR = 4
VERSION_BUILD = 0
VERSION_ALPHA = 0
VERSION_ALPHA = 1
# END_VERSION_BLOCK
3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
json_database
ovos-bus-client
ovos-utils
8 changes: 5 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

def get_version():
""" Find the version of the package"""
version = None
version_file = os.path.join(BASEDIR, 'hivemind_plugin_manager', 'version.py')
major, minor, build, alpha = (None, None, None, None)
with open(version_file) as f:
Expand Down Expand Up @@ -48,7 +47,10 @@ def required(requirements_file):
url='https://github.com/JarbasHiveMind/hivemind-plugin-manager',
license='Apache-2.0',
author='jarbasAi',
#install_requires=required("requirements.txt"),
install_requires=required("requirements.txt"),
author_email='[email protected]',
description='plugin manager for hivemind-core'
description='plugin manager for hivemind-core',
entry_points={
"console_scripts": ["hpm=hivemind_plugin_manager.tui:cli"]
}
)

0 comments on commit 595b3ca

Please sign in to comment.