#python #git #github
#python #git #github
Вопрос:
Я хотел бы получить URL-адрес репозитория GitHub из ХЭША коммита.
Я быстро нашел это решение:
import json
import requests
def search_commits(sha):
headers = {'Accept': 'application/vnd.github.cloak-preview'}
req = requests.get('http://api.github.com/search/commits',
{'q': sha},
headers=headers)
return json.loads(req.text)
commit = search_commits('e83c5163316f89bfbde7d9ab23ca2e25604af290')['items'][0]
clone_url = commit['repository']['url']
Я попробовал то же самое с PyGitHub
:
from github import Github
g = Github()
commit = g.search_commits('e83c5163316f89bfbde7d9ab23ca2e25604af290')[0]
К сожалению, в этом результате (даже в commit.raw_data
) нет ключа repository
.
Кажется, PyGithub использует search/commits
, как описано здесь: https://developer.github.com/v3/search/#search-commits
Как я могу получить URL-адрес репозитория?
Одним из возможных клуджей было бы:
import re
repo = g.get_repo(
re.search('repos/(.*?)/commits', c.raw_data['url']).group(1)
)
clone_url = repo.clone_url
Комментарии:
1. Коммиты не знают своих URL-адресов, поскольку их можно отправить на многие удаленные устройства. Какую информацию вы хотите получить с помощью URL-адреса?
2. @phd, как вы можете объяснить, что я могу получить репозиторий из объекта фиксации (см. kludge)?
Ответ №1:
URL-адрес доступен в _rawData
, но я сомневаюсь, что он предназначен для использования, префикс подчеркивания обычно используется для обозначения частного атрибута
from github import Github
g = Github()
commit = g.search_commits('e83c5163316f89bfbde7d9ab23ca2e25604af290')[0]
url = commit._rawData['repository']['url']
print(url)