Как принять приглашение Github через API? - PullRequest
5 голосов
/ 17 апреля 2020

Я смотрел на Github API, и он позволяет вам получать все приглашения в репозиторий через конечную точку API (см. https://developer.github.com/v3/repos/invitations/#list -invitations-for-a-repository ). Это работает нормально, как это:

from requests.auth import HTTPBasicAuth
import requests
login = 'xxx'
password = 'yyy'
url = 'https://api.github.com/user/repository_invitations'
repository_invites = requests.get(
            url, auth=HTTPBasicAuth(login, password)).json()
print('response: ' + str(repository_invites))

Я могу затем получить каждый запрос его url, как это:

for repository_invite in repository_invites:
    print('url: ' + repository_invite.get('url'))

, который возвращает что-то вроде:

url: https://api.github.com/user/repository_invitations/123456789

Github также упоминает, что вы можете принять приглашение на https://developer.github.com/v3/repos/invitations/#accept -a-хранилище-приглашение , в котором упоминается

PATCH / user / repository_invitations /: приглашение_id

Чего я не понимаю, так это как я могу сказать Github, как принять это. Эта конечная точка, кажется, используется как для удаления, так и для принятия приглашения. Github говорит о PATCH на https://developer.github.com/v3/#http -verbs , в котором упоминается, что вы можете использовать либо POST, либо отправить PATCH запрос, но не как. Итак, вопрос в том, как мне узнать, что я должен отправить в вызове PATCH? Я попробовал это например:

result = requests.patch(repository_invite.get('url'), json.dumps({'accept': True}))
    print('result: ' + str(result.json()))

, который возвращает:

result: {'message': 'Invalid request.\n\n"accept" is not a permitted key.', 'documentation_url': 'https://developer.github.com/v3'}

1 Ответ

4 голосов
/ 21 апреля 2020

Чтобы вызвать конечную точку API, вам необходимо пройти аутентификацию с вашим пользователем Github и отправить вызов Patch (который может принимать данные / заголовки, если они вам понадобятся). Вот рабочий пример:

for repository_invite in repository_invites:
    repository_id = repository_invite.get('id')
    accept_invite = requests.patch('https://api.github.com/user/repository_invitations/'+ str(repository_id), 
            data={}, headers={},
            auth=HTTPBasicAuth(github_username, github_password))

Без аутентификации вызов Patch вернет код ответа 404, потому что он доступен только после входа в систему в очевидных целях безопасности. Если вы позвоните конечной точке user/repository_invitations/, за которой последует идентификатор, Github автоматически примет приглашение.

...