Github 评论中渲染表的问题[编辑]

问题描述 投票:0回答:1

所以我使用 python 代码在 Github 上对我的 PR 提交发表评论

# Create a table
table = f"""
        
| File Changed | Summary |
|--------------|---------|
{"".join(commit_summary)}
"""

# comment body for review comment
comment_body = f"""
{"".join([f"{line}" for line in summary])}

## Files Changed and Summaries

{table}
"""

comment_data = {
        "commit_id": commit_sha,
        "body": comment_body,
        }
comment_url = f'https://api.github.com/repos/{owner}/{repo_name}/pulls/{pr_number}/reviews'

但是,在 github 评论中,该表格以普通文本形式出现,而不是我打算展示的漂亮表格

尝试询问 gpt 并检查 github 文档,但我陷入困境

编辑: 对于所有询问 commit_summary 变量是什么样子的人来说,它是一个可能具有这样的值的列表

(f"| {文件名} | {摘要} | ”)

它包含 PR 中更改的文件以及它们的内容和问题的简短摘要

目前我得到的表格是这样的 |文件已更改 |总结| |--------------|---------| |审查_prs.py |您提供的代码片段似乎是

我希望它是这样的

a properly rendered github comment table

python github github-flavored-markdown
1个回答
2
投票

制作 Markdown 表格的通用函数...

from __future__ import annotations

def build_row(field_widths: dict[str, int], row: dict[str, str]) -> str:
    pipe_escape = '\|'
    inner = '|'.join(f'{row[header].replace("|", pipe_escape).ljust(width)}' for header, width in field_widths.items())
    return f'|{inner}|'

def make_table(headers: list[str], rows: list[dict[str, str]]) -> str:
    field_widths = {}
    for header in headers:
        field_widths[header] = len(header) + header.count('|')

    for row in rows:
        for field_name, value in row.items():
            if field_name not in headers:
                raise ValueError(f"field name {field_name!r} not in headers")
            current_width = field_widths[field_name]
            this_width = len(value) + value.count('|')
            if this_width > current_width:
                field_widths[field_name] = this_width

    header_sep = build_row(field_widths, {h: '-' * field_widths[h] for h in headers})
    header_row = {h:h for h in headers}
    header = build_row(field_widths, header_row)
    table_rows = [build_row(field_widths, row) for row in rows]
    newline = '\n'
    table = f'{header}\n{header_sep}\n{newline.join(table_rows)}'
    return table

然后您可以使用该函数创建一个包含特定标题和数据的表格:

field_names = ['File changed', 'Summary']
rows = [
    {'File changed': '/path/to/foo/bar/baz', 'Summary': '-100 +200'},
    {'File changed': '/path/to/bacon/eggs/spam', 'Summary': '-1 +2'},
    {'File changed': '/path/to/buzz/crash/split', 'Summary': '-1234 +1234'},
]

print(make_table(headers=field_names, rows=rows))

将输出:

|File changed             |Summary    |
|-------------------------|-----------|
|/path/to/foo/bar/baz     |-100 +200  |
|/path/to/bacon/eggs/spam |-1 +2      |
|/path/to/buzz/crash/split|-1234 +1234|

在 GitHub markdown 中查看时,看起来像:


将正文发送到 GitHub API 时,您需要确保其格式正确。即:请求正文需要进行 JSON 编码。如果您使用

requests
库,当您使用
comment_data
关键字传递
json
时,就会为您完成此操作,例如
requests.post(comment_url, json=comment_data)
但否则您将需要正确编码您的有效负载。
有关更多详细信息,请参阅:使用 GitHub API 将 Markdown 表作为 Pull Request 评论发布到 GitHub

© www.soinside.com 2019 - 2024. All rights reserved.