Files
project-manager/project_manager/preset/entry.py
T
2023-03-19 21:21:48 +03:00

38 lines
1.5 KiB
Python

from collections import defaultdict
from pathlib import Path
from typing import Optional
from ..entry import Entry, EntryDetector
from .util import PresetUtil
from .value import ValueResolver
__all__ = ("PresetEntryDetector",)
class PresetEntryDetector(EntryDetector):
def __init__(self, filename: Path):
self._preset = PresetUtil.resolve_preset(filename)
def detect_entry(self, basepath: Path) -> Optional["Entry"]:
tasks = defaultdict(list)
for preset_name, preset in self._preset.presets.items():
filename = basepath / preset.filename
if filename.exists():
value_resolver = ValueResolver(basepath)
for task_name, task_pack in preset.tasks.items():
for task_item_name, task in task_pack.items():
if value_resolver.check_conditions(task.conditions):
variables = (
{
k: value_resolver.resolve_value(v)
for k, v in task.variables.items()
}
if task.variables
else {}
)
tasks[task_name] += [
command.format(**variables) for command in task.commands
]
if tasks:
return Entry(tasks, basepath)