Source code for mc_plugin_helper.plugin_manager

"""Module for some plugin-manager methods."""

from os.path import join
from typing import Dict, List

from yaml import safe_load as parse_yaml

from mc_plugin_helper.config import config
from mc_plugin_helper.file_manager.factory import FileManagerFactory


[docs]class Plugin: """Create object for plugin.""" def __init__(self, name, version, file_path) -> None: """__init__ method.""" self.name = name self.version = version self.file_path = file_path
[docs]class PluginManager: """Make some stuff with plugin management.""" def __init__(self, folder: str) -> None: """__init__ method. Args: folder: Folder with plugins. """ self.file_manager = FileManagerFactory.create_file_manager(config["config"]["protocol"]) # type: ignore[arg-type] self.plugins_location = folder
[docs] def get_all_plugins(self) -> List[Plugin]: """Getter for list with all plugins. Returns: List with all plugins. """ plugins = [] for file in self.file_manager.get_all_files(self.plugins_location): if not file.endswith(".jar"): continue parsed_data = self.process_plugin(join(self.plugins_location, file)) plugins.append( Plugin( name=parsed_data["name"], version=parsed_data["version"], file_path=join(self.plugins_location, file), ), ) return plugins
# TODO move to async function
[docs] def process_plugin(self, jar_file) -> Dict[str, str]: """Opens plugin.jar and then parsing plugin.yml inside .jar. Args: jar_file: File object, which points to plugin. Returns: Parsed yaml in dict. """ plugin_yml = self.file_manager.open_jar(jar_file) return parse_yaml(plugin_yml) # type: ignore[no-any-return]