【问题标题】:How to access Gerrit Rest API using python如何使用 python 访问 Gerrit Rest API
【发布时间】:2018-08-16 06:15:03
【问题描述】:

首先,我对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 获取。怎么做? 如果问题不清楚,请评论/编辑。 谢谢

【问题讨论】:

    标签: python gerrit


    【解决方案1】:

    您遇到了来自请求库的连接错误(pygerrit2 是dependent on 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 文档,因为它们包含大量有关退避的有用信息。

    【讨论】:

    • 我是一个完整的初学者。如何打印更改变量中的值?
    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2016-02-22
    • 1970-01-01
    • 2019-05-17
    • 2014-07-29
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多