python - 如何使用 python 访问 Gerrit Rest API
问题描述
首先,我对gerrit的理解有限。
我正在尝试使用 python 访问 Gerrit Rest API,但无法这样做。我想获取与帐户相关的所有信息(提交、评论)。
from requests.auth import HTTPDigestAuth
from pygerrit2 import GerritRestAPI, HTTPBasicAuth
auth = HTTPBasicAuth('user', 'password')
from pygerrit2 import GerritRestAPI
rest = GerritRestAPI(url='https://xxx.xx.xxx.xxx.com/', auth = auth)
changes = rest.get("changes/?q=is:open&q=is:close&q=all&o=DETAILED_ACCOUNTS&o=ALL_REVISIONS&o=ALL_COMMITS&o=ALL_FILES&o=MESSAGES", headers={'Content-Type': 'application/json'})
我得到的错误是:
ConnectionError: HTTPSConnectionPool(host='xxx.xx.xxx.xxx.com', port=443): Max retries exceeded with url: /login/a/changes/?q=is:open&q=is:close&q=all&o=DETAILED_ACCOUNTS&o=ALL_REVISIONS&o=ALL_COMMITS&o=ALL_FILES&o=MESSAGES (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x825bad0>: Failed to establish a new connection: [Errno 110] Connection timed out',))
如果我将查询复制粘贴到 url 中,我可以获取信息,但不能通过 python 获取。怎么做?如果问题不清楚,请评论/编辑。谢谢
解决方案
您遇到来自 requests 库的连接错误(pygerrit2依赖于 requests) - 这是因为您的连接超时。为避免这种情况,我建议使用backoff 之类的库。退避将捕获此连接错误并重试建立连接。这可以通过装饰器和导入轻松完成。
from requests.auth import HTTPDigestAuth
from pygerrit2 import GerritRestAPI, HTTPBasicAuth
import backoff
import requests
@backoff.on_exception(backoff.expo,
requests.exceptions.ConnectionError,
max_time=10)
def makeGerritAPICall():
auth = HTTPBasicAuth('user', 'password')
rest = GerritRestAPI(url='https://xxx.xx.xxx.xxx.com/', auth = auth)
changes = rest.get("changes/?q=is:open&q=is:close&q=all&o=DETAILED_ACCOUNTS&o=ALL_REVISIONS&o=ALL_COMMITS&o=ALL_FILES&o=MESSAGES", headers={'Content-Type': 'application/json'})
以下函数将在失败并引发 ConnectionError 之前重试任何遇到 ConnectionError 10 秒的请求。
我建议访问退避 git README 文档,因为它们包含大量有关退避的有用信息。
推荐阅读
- angular - Angular 7 在服务中获取 Json 数组
- java - 处理guess(float[])即使被声明也不存在
- sql - MS SQL Server 使用复合键选择多行
- python - 试图简化代码,附加问题
- java - rxjava2 基于发射数量的分支逻辑
- bash - 在 bash 中使用 && 在输出中查找两个字符串
- java - 使用 Google Admin Directory API 添加组 - 403 未授权访问此资源/API
- php - 使用 apachectl 启动的 Mac 上未加载 PHP 文件
- neural-network - 神经网络和big-o
- c# - 如何将所选项目(具有字符串格式)保存到多个文本框中