promptflow
47 строк · 1.5 Кб
1import io
2import re
3from pathlib import Path
4
5import panflute
6import pypandoc
7
8from .readme_step import ReadmeStepsManage
9
10
11def strip_comments(code):
12code = str(code)
13code = re.sub(r"(?m)^ *#.*\n?", "", code) # remove comments
14splits = [ll.rstrip() for ll in code.splitlines() if ll.strip()] # remove empty
15splits_no_interactive = [
16split
17for split in splits
18if "interactive" not in split
19and "pf flow serve" not in split
20and "pf connection delete" not in split
21] # remove --interactive and pf flow serve and pf export docker
22text = "\n".join([ll.rstrip() for ll in splits_no_interactive])
23# replacements
24text = text.replace("<your_api_key>", "$aoai_api_key")
25text = text.replace("<your_api_base>", "$aoai_api_endpoint")
26text = text.replace("<your_subscription_id>", "$test_workspace_sub_id")
27text = text.replace("<your_resource_group_name>", "$test_workspace_rg")
28text = text.replace("<your_workspace_name>", "$test_workspace_name")
29return text
30
31
32def prepare(doc):
33doc.full_text = ""
34
35
36def action(elem, doc):
37if isinstance(elem, panflute.CodeBlock) and "bash" in elem.classes:
38doc.full_text = "\n".join([doc.full_text, strip_comments(elem.text)])
39
40
41def readme_parser(filename: str):
42real_filename = Path(ReadmeStepsManage.git_base_dir()) / filename
43data = pypandoc.convert_file(str(real_filename), "json")
44f = io.StringIO(data)
45doc = panflute.load(f)
46panflute.run_filter(action, prepare, doc=doc)
47return doc.full_text
48