У меня есть следующий код для взаимодействия с запросами на вытягивание на github api.
def merge(pull):
url = "https://api.github.com/repos/{}/{}/pulls/{}/merge".format(os.environ.get("GITHUB_USERNAME"), os.environ.get("GITHUB_REPO"), pull['number'])
response = requests.put(url, auth=get_auth(), data = {})
if response.status_code == 200:
#Merge was successful
return True
else:
#Something went wrong. Oh well.
return response.status_code
def close(pull):
url = "https://api.github.com/repos/{}/{}/pulls/{}".format(os.environ.get("GITHUB_USERNAME"), os.environ.get("GITHUB_REPO"), pull['number'])
payload = {"state" : "closed"}
response = requests.put(url, auth=get_auth(), data=payload)
if response.status_code == 200:
#Close was successful
return True
else:
#Something went wrong. Oh well.
return response.status_code
Теперь слияние работает нормально, когда я запускаю его с запросом на перенос, запрос на перенос объединяется, и это хорошо.
Но close дает мне 404. Это странно, поскольку слияние может четко найти запрос на перенос, а также показывает, что у меня явно есть права, настроенные правильно, поэтому я могу закрыть запрос.
Я также подтвердил, что могу закрыть запрос вручную, войдя в систему на github и нажав кнопку «закрыть пул реквест».
Почему github дает мне 404 для функции закрытия, но не для функции слияния? Чем отличаются эти две функции?






Ответ заключается в том, что вызов api «обновить запрос на перенос» должен быть запросом POST, а не запросом на размещение.
Изменение
response = requests.put(url, auth=get_auth(), data=payload)
к
response = requests.post(url, auth=get_auth(), data=payload)
Исправлена проблема.
Рассмотрите возможность использования библиотеки, такой как github.com/PyGithub/PyGithub или github.com/sigmavirus24/github3.py, а не ручных запросов.