Refactor plugin registry into separate files per plugin
This commit is contained in:
@@ -65,6 +65,26 @@ def _asset_matches_patterns(name: str, patterns: tuple[str, ...]) -> bool:
|
||||
return not patterns or any(fnmatch.fnmatch(name, pattern) for pattern in patterns)
|
||||
|
||||
|
||||
def _expand_required_dependencies(selected_ids: set[str], registry: Registry, lockfile: Lockfile) -> set[str]:
|
||||
locked_ids = {plugin.id for plugin in lockfile.plugins}
|
||||
expanded = set(selected_ids)
|
||||
pending = list(selected_ids)
|
||||
while pending:
|
||||
plugin_id = pending.pop()
|
||||
registry_plugin = registry.get(plugin_id)
|
||||
if not registry_plugin:
|
||||
continue
|
||||
for dependency in registry_plugin.dependencies:
|
||||
if not dependency.required:
|
||||
continue
|
||||
if dependency.id not in locked_ids:
|
||||
raise ValueError(f"{plugin_id}: required dependency is not locked for this instance: {dependency.id}")
|
||||
if dependency.id not in expanded:
|
||||
expanded.add(dependency.id)
|
||||
pending.append(dependency.id)
|
||||
return expanded
|
||||
|
||||
|
||||
def create_plan(
|
||||
*,
|
||||
instance: str,
|
||||
@@ -77,7 +97,11 @@ def create_plan(
|
||||
selected: set[str] | None = None,
|
||||
require_bootstrap: bool = True,
|
||||
) -> tuple[dict[str, Any], Path]:
|
||||
selected_ids = selected or {plugin.id for plugin in lockfile.plugins}
|
||||
selected_ids = (
|
||||
_expand_required_dependencies(selected, registry, lockfile)
|
||||
if selected is not None
|
||||
else {plugin.id for plugin in lockfile.plugins}
|
||||
)
|
||||
changes: list[dict[str, Any]] = []
|
||||
warnings: list[str] = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user