promptflow
90 строк · 2.9 Кб
1import argparse
2from pathlib import Path
3from functools import reduce
4
5from ghactions_driver.readme_workflow_generate import write_readme_workflow
6from ghactions_driver.readme_step import ReadmeStepsManage, ReadmeSteps
7from ghactions_driver.readme_parse import readme_parser
8
9from ghactions_driver.telemetry_obj import Telemetry
10
11
12def local_filter(callback, array: [Path]):
13results = []
14backups = []
15for index, item in enumerate(array):
16result = callback(item, index, array)
17# if returned true, append item to results
18if result:
19results.append(item)
20else:
21backups.append(item)
22return results, backups
23
24
25def no_readme_generation_filter(item: Path, index, array) -> bool:
26"""
27If there is no steps in the readme, then no generation
28"""
29try:
30if 'build' in str(item): # skip build folder
31return False
32
33full_text = readme_parser(item.relative_to(ReadmeStepsManage.git_base_dir()))
34if full_text == "":
35return False
36else:
37return True
38except Exception as error:
39print(error)
40return False # generate readme
41
42
43def main(input_glob, exclude_glob=[], output_files=[]):
44def set_add(p, q):
45return p | q
46
47def set_difference(p, q):
48return p - q
49
50globs = reduce(set_add, [set(Path(ReadmeStepsManage.git_base_dir()).glob(p)) for p in input_glob], set())
51globs_exclude = reduce(set_difference,
52[set(Path(ReadmeStepsManage.git_base_dir()).glob(p)) for p in exclude_glob],
53globs)
54readme_items = sorted([i for i in globs_exclude])
55
56readme_items, no_generation_files = local_filter(no_readme_generation_filter, readme_items)
57for readme in readme_items:
58readme_telemetry = Telemetry()
59workflow_name = readme.relative_to(ReadmeStepsManage.git_base_dir())
60# Deal with readme
61write_readme_workflow(workflow_name.resolve(), readme_telemetry)
62ReadmeSteps.cleanup()
63output_files.append(readme_telemetry)
64for readme in no_generation_files:
65readme_telemetry = Telemetry()
66from ghactions_driver.resource_resolver import resolve_tutorial_resource
67try:
68resolve_tutorial_resource(
69"TEMP", readme.resolve(), readme_telemetry
70)
71except Exception:
72pass
73readme_telemetry.readme_name = str(readme.relative_to(ReadmeStepsManage.git_base_dir()))
74readme_telemetry.readme_folder = str(readme.relative_to(ReadmeStepsManage.git_base_dir()).parent)
75output_files.append(readme_telemetry)
76
77
78if __name__ == "__main__":
79# setup argparse
80parser = argparse.ArgumentParser()
81parser.add_argument(
82"-g",
83"--input-glob",
84nargs="+",
85help="Input Readme.md glob example 'examples/flows/**/Readme.md'",
86)
87args = parser.parse_args()
88
89# call main
90main(args.input_glob)
91