Add @after/@before on blocks!

This commit is contained in:
Olivier 'reivilibre' 2020-12-12 17:49:59 +00:00
parent da4afef4ad
commit 6094d30aae

View File

@ -372,6 +372,15 @@ class MenuLoader:
return result
def get_all_menublock_recipes(self, block: MenuBlock) -> Iterable[MenuRecipe]:
for child in block.contents:
if isinstance(child, MenuRecipe):
yield child
elif isinstance(child, MenuBlock):
yield from self.get_all_menublock_recipes(child)
else:
raise RuntimeError(f"Unknown child {child!r}")
def dagify_recipe(
self,
recipe: MenuRecipe,
@ -490,10 +499,15 @@ class MenuLoader:
target = self.resolve_ref(recipe, recipe_edge.recipe_id)
if isinstance(target, MenuBlock):
# TODO(feature)
raise NotImplementedError(
"@after/@before on block is not yet here sadly"
)
# Get all recipes and apply the edge to them.
for target_recipe in self.get_all_menublock_recipes(target):
for target_instance in self.get_related_instances(
sous, for_indices, recipe, target_recipe
):
if recipe_edge.kind == "after":
self._dag.add_ordering(target_instance, instance)
elif recipe_edge.kind == "before":
self._dag.add_ordering(instance, target_instance)
elif isinstance(target, MenuRecipe):
for target_instance in self.get_related_instances(
sous, for_indices, recipe, target