这是根据 bitbucket 的文档检索特定拉取请求的评论的方法:
虽然我确实有拉取请求 ID 并设置了正确的 URL 格式,但我仍然收到 400 响应错误。我可以发出 POST 评论请求,但无法发出 GET。进一步阅读后,我注意到为该端点列出的六个参数没有说“可选”。看起来需要提供这些才能检索所有评论。
但是这些参数到底是什么?我发现他们的描述丝毫没有帮助。任何和所有帮助将不胜感激!
最佳答案
fromHash
和 toHash
仅在 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 进行分页,所以你必须做一些额外的工作来构建一个完整的列表:要么设置一个令人讨厌的高限制(脏),要么继续发出请求直到你获取所有内容。我强烈推荐后者。
您可以使用 start
和 limit
参数控制获取哪些数据,您可以直接将这些参数附加到 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/
相关文章:
python - numpy 中如何实现多维数组切片/索引?
reactjs - 如何在 primereact 中拥有主题切换器
sass - Stylelint 禁用规则, "no-descending-specificity"
python - 通用协议(protocol) : mypy error: Argument 1 h
serialization - 使用#[serde(untagged)] 和#[serde(with
kubernetes - 部署后如何在 kubernetes 中删除 Traefik 2.0 中间件