graph: add a command to graph just one item
This commit is contained in:
parent
4f2aaa7f1c
commit
d3b782f1a1
38
graph.py
38
graph.py
@ -12,6 +12,25 @@ def graph_all(recipes: dict) -> None:
|
|||||||
print("}")
|
print("}")
|
||||||
|
|
||||||
|
|
||||||
|
def graph_one(recipes: dict, target: str) -> None:
|
||||||
|
print("digraph G {")
|
||||||
|
|
||||||
|
seen = set()
|
||||||
|
remain = set()
|
||||||
|
remain.add(target)
|
||||||
|
|
||||||
|
while remain:
|
||||||
|
output = remain.pop()
|
||||||
|
|
||||||
|
for need in recipes[output][0]['input']:
|
||||||
|
print(f"{need} -> {output}")
|
||||||
|
if need not in seen:
|
||||||
|
remain.add(need)
|
||||||
|
|
||||||
|
seen.add(output)
|
||||||
|
print("}")
|
||||||
|
|
||||||
|
|
||||||
def load_recipes(recipe_root: str) -> dict:
|
def load_recipes(recipe_root: str) -> dict:
|
||||||
recipes = dict()
|
recipes = dict()
|
||||||
|
|
||||||
@ -28,6 +47,23 @@ def load_recipes(recipe_root: str) -> dict:
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
def main():
|
||||||
|
import argparse
|
||||||
|
|
||||||
root = os.path.dirname(__file__)
|
root = os.path.dirname(__file__)
|
||||||
recipe_root = os.path.join(root, 'data', 'recipes')
|
recipe_root = os.path.join(root, 'data', 'recipes')
|
||||||
graph_all(load_recipes(recipe_root))
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--data', type=str, default=recipe_root)
|
||||||
|
parser.add_argument('--target', type=str, required=False)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
recipes = load_recipes(args.data)
|
||||||
|
|
||||||
|
if args.target:
|
||||||
|
graph_one(recipes, args.target)
|
||||||
|
else:
|
||||||
|
graph_all(recipes)
|
||||||
|
|
||||||
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user