如何拒绝Python对Bitbucket的拉取请求?

时间:2019-05-09 18:40:55

标签: python api bitbucket

您如何使用Bitbucket的2.0 API通过Python拒绝请求请求?

根据their documentaion,它应该类似于:

import requests
kwargs = {
    'username': MY_BITBUCKET_ACCOUNT,
    'repo_slug': MY_BITBUCKET_REPO,
    'pull_request_id': pull_request_id
}
url = 'https://api.bitbucket.org/2.0/repositories/{username}/{repo_slug}/pullrequests/{pull_request_id}/decline'.format(**kwargs)
headers = {'Content-Type': 'application/json'}
response = requests.post(url, auth=(USERNAME, PASSWORD), headers=headers)

但是,这失败了,response.text只是说了“错误请求”。

这个类似的代码对我的其他API端点适用于我,所以我不确定为什么拒绝方法会失败。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您必须通过誓言进行身份验证。我写了一个包装来提出这些要求。这是一个简单的示例。我唯一不知道的是如何添加一个被拒绝的原因。我最终提出了一个请求,然后才拒绝了PR,该PR添加了关于拒绝原因的评论。

import os

from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session


class Bitbucket(object):

    def __init__(self, client_id, client_secret, workplace, repo_slug):
        self.workplace = workplace  # username or company username
        self.repo_slug = repo_slug
        self.token_url = 'https://bitbucket.org/site/oauth2/access_token'
        self.api_url = 'https://api.bitbucket.org/2.0/'
        self.max_pages = 10
        self.client = BackendApplicationClient(client_id=client_id)
        self.oauth = OAuth2Session(client=self.client)
        self.oauth.fetch_token(
            token_url=self.token_url,
            client_id=client_id,
            client_secret=client_secret
        )

    def get_api_url(self, endpoint):
        return f'{self.api_url}repositories/{self.workplace}/{self.repo_slug}/{endpoint}'


bitbucket = Bitbucket(os.environ['BITBUCKET_KEY'], os.environ['BITBUCKET_SECRET'], workplace='foo', repo_slug='bar')
pr_id = 1234
resp = bitbucket.oauth.post(f"{bitbucket.get_api_url('pullrequests')}/{pr_id}/decline")
if resp.status_code == 200:
    print('Declined')
else:
    print('Someting went wrong.')