1 from pathlib
import Path
2 from typing
import Dict
, List
, Any
3 from io
import StringIO
4 from budget_sync
.budget_graph
import BudgetGraph
, Node
, Payment
, PayeeState
5 from budget_sync
.config
import Person
, Milestone
, Config
8 def _markdown_escape_char(char
: str) -> str:
13 if char
in "\\`*_{}[]()#+-.!":
18 def _markdown_escape(v
: Any
) -> str:
19 return "".join([char
for char
in str(v
)])
22 def _markdown_for_person(person
: Person
,
23 payments_dict
: Dict
[Milestone
, List
[Payment
]]) -> str:
25 print(f
"<!-- autogenerated by budget-sync -->", file=buffer)
26 print(f
"# {person.identifier}", file=buffer)
28 print(f
"# Status Tracking", file=buffer)
29 for milestone
, payments_list
in payments_dict
.items():
30 if len(payments_list
) == 0:
32 print(f
"## {milestone.identifier}", file=buffer)
33 for payment
in payments_list
:
35 summary
= _markdown_escape(payment
.node
.bug
.summary
)
36 print(f
"* [Bug #{payment.node.bug.id}: "
37 f
"{summary}]({payment.node.bug_url})",
39 return buffer.getvalue()
42 def write_budget_markdown(budget_graph
: BudgetGraph
,
44 output_dir
.mkdir(parents
=True, exist_ok
=True)
45 for person
, payments_dict
in budget_graph
.payments
.items():
46 output_dir
.joinpath(person
.output_markdown_file
) \
47 .write_text(_markdown_for_person(person
, payments_dict
),