mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2026-08-28 18:14:19 -05:00
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
from chia.data_layer.data_layer_util import PluginRemote
|
|
from chia.util.log_exceptions import log_exceptions
|
|
|
|
|
|
async def load_plugin_configurations(root_path: Path, config_type: str, log: logging.Logger) -> list[PluginRemote]:
|
|
"""
|
|
Loads plugin configurations from the specified directory and validates that the contents
|
|
are in the expected JSON format (an array of PluginRemote objects). It gracefully handles errors
|
|
and ensures that the necessary directories exist, creating them if they do not.
|
|
|
|
Args:
|
|
root_path (Path): The root path where the plugins directory is located.
|
|
config_type (str): The type of plugins to load ('downloaders' or 'uploaders').
|
|
|
|
Returns:
|
|
list[PluginRemote]: A list of valid PluginRemote instances for the specified plugin type.
|
|
"""
|
|
config_path = root_path / "plugins" / config_type
|
|
config_path.mkdir(parents=True, exist_ok=True) # Ensure the config directory exists
|
|
|
|
valid_configs = []
|
|
for conf_file in config_path.glob("*.conf"):
|
|
with log_exceptions(
|
|
log=log,
|
|
consume=True,
|
|
message=f"Skipping config file due to failure loading or parsing: {conf_file}",
|
|
):
|
|
with open(conf_file) as file:
|
|
data = yaml.safe_load(file)
|
|
|
|
valid_configs.extend([PluginRemote.unmarshal(marshalled=item) for item in data])
|
|
log.info(f"loaded plugin configuration: {conf_file}")
|
|
return valid_configs
|