api - 通过 Bitbucket REST API 获取所有 Pull-Request 评论

这是根据 bitbucket 的文档检索特定拉取请求的评论的方法:

虽然我确实有拉取请求 ID 并设置了正确的 URL 格式,但我仍然收到 400 响应错误。我可以发出 POST 评论请求,但无法发出 GET。进一步阅读后,我注意到为该端点列出的六个参数没有说“可选”。看起来需要提供这些才能检索所有评论。

但是这些参数到底是什么?我发现他们的描述丝毫没有帮助。任何和所有帮助将不胜感激!

最佳答案

fromHashtoHash 仅在 diffType 未设置为 EFFECTIVE 时才需要。 state 对我来说似乎也是可选的(不包括它时没有给我一个错误),并且 anchorState 指定要获取哪种评论 - 你可能想要 ALL 那里。据我了解,path 包含要从中读取注释的文件的路径。 (例如:src/a.py 和 src/b.py 已更改 -> 指定要为其中的哪些获取评论) 但是,这可能不是您想要的。我假设您想获取所有评论。

您可以通过 /rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities 做到这一点其中还包括评论等其他事件,因此您必须进行一些过滤。

我不会粘贴文档中的示例数据或我测试过一次的 bitbucket 实例,因为 json 响应很长。正如我所说,链接页面上有一个示例响应。我还认为你会弄清楚如何在下载后获得你想要的数据,因为这是一个问答论坛而不是“为我编程”页面:b

作为一个小的快速入门:你可以像这样使用 curl

curl -u <your_username>:<your_password> https://<bitbucket-url>/rest/api/1.0/projects/<project-key>/repos/<repo-name>/pull-requests/<pr-id>/activities

这将打印响应 json。

使用 requests 的 curl 片段的 Python 版本模块:

import requests

url = "<your-url>"  # see above on how to assemble your url
r = requests.get(
    url,
    params={},  # you'll need this later
    auth=requests.auth.HTTPBasicAuth("your-username", "your-password")
)

请注意,结果根据 api documentation 进行分页,所以你必须做一些额外的工作来构建一个完整的列表:要么设置一个令人讨厌的高限制(脏),要么继续发出请求直到你获取所有内容。我强烈推荐后者。

您可以使用 startlimit 参数控制获取哪些数据,您可以直接将这些参数附加到 url(例如 https://bla/asdasdasd/activity?start=25) 或 - 更干净地 - 添加到 params 字典中,如下所示:

requests.get(
    url,
    params={
        "start": 25,
        "limit": 123
    }
)

综合起来:

def get_all_pr_activity(url):
    start = 0
    values = []
    while True:
        r = requests.get(url, params={
            "limit": 10,  # adjust this limit to you liking - 10 is probably too low
            "start": start
        }, auth=requests.auth.HTTPBasicAuth("your-username", "your-password"))
        values.extend(r.json()["values"])
        if r.json()["isLastPage"]:
            return values
        start = r.json()["nextPageStart"]


print([x["id"] for x in get_all_pr_activity("my-bitbucket-url")])

将打印事件 ID 列表,例如[77190, 77188, 77123, 77136] 等等。当然,您可能不应该在那里硬编码您的用户名和密码 - 这只是一个例子,而不是生产就绪代码。

最后,要按函数内的操作进行过滤,您可以将返回值替换为类似

的内容
return [activity for activity in values if activity["action"] == "COMMENTED"]

https://stackoverflow.com/questions/68306295/

相关文章:

x86-64 - AVX512 与矢量比较不屏蔽

python - numpy 中如何实现多维数组切片/索引?

reactjs - 如何在 primereact 中拥有主题切换器

sass - Stylelint 禁用规则, "no-descending-specificity"

python - 通用协议(protocol) : mypy error: Argument 1 h

serialization - 使用#[serde(untagged)] 和#[serde(with

rust - 如何正确处理 Warp 路由的错误

kubernetes - 部署后如何在 kubernetes 中删除 Traefik 2.0 中间件

django - 如何在基于 Django 类的 View 中更改模板

ansible - 如何在ansible替换模块中转义+字符