(changes: list[Change])
| 66 | |
| 67 | |
| 68 | def generate_changes_plaintext(changes: list[Change]) -> str: |
| 69 | if len(changes) == 0: |
| 70 | return "" |
| 71 | |
| 72 | table_total_width = 136 |
| 73 | percents_max_len = 7 + 4 + 7 |
| 74 | key_max_len = max(len(key) for _, key, _, _ in changes) |
| 75 | name_max_len = max(len(name or "Total") for name, _, _, _ in changes) |
| 76 | max_width_for_name_col = table_total_width - 3 - key_max_len - 3 - percents_max_len |
| 77 | name_max_len = min(max_width_for_name_col, name_max_len) |
| 78 | |
| 79 | out_lines = [] |
| 80 | for name, key, from_value, to_value in changes: |
| 81 | if name is None: |
| 82 | name = "Total" |
| 83 | if len(name) > name_max_len: |
| 84 | name = name[: name_max_len - len("[...]")] + "[...]" |
| 85 | out_lines.append( |
| 86 | f"{name:>{name_max_len}} | {key:<{key_max_len}} | {format_float(from_value)}% -> {format_float(to_value)}%" |
| 87 | ) |
| 88 | |
| 89 | return "\n".join(out_lines) |
| 90 | |
| 91 | |
| 92 | def generate_changes_markdown(changes: list[Change], description: str) -> str: |
no test coverage detected