Рекомендуемый способ перечисления всех репо / коммитов для данного пользователя с использованием github3.py

Я создаю приложение GitHub для извлечения информации о коммите из наших внутренних репозиториев. Я использую следующий код для перебора всех коммитов:

gh = login(token=gc.ACCESS_TOKEN)
for repo in gh.iter_repos():
    for commit in repo.iter_commits():
        print(commit.__dict__)
        print(commit.additions)
        print(commit.author)
        print(commit.commit)
        print(commit.committer)
        print(commit.deletions)
        print(commit.files)
        print(commit.total)

Добавления / удаления / итоговые значения возвращаются как 0и атрибут files всегда []. Когда я нажимаю на ссылку, я вижу, что это не так. Я подтвердил через curl вызывает, что API действительно имеет запись этих атрибутов.

Читая больше в документации, кажется, что iter_commits не рекомендуется в пользу iter_user_commits, Может быть, это так, почему он не возвращает всю информацию о коммитах? Однако этот метод не возвращает мне никаких репозиториев, когда я использую его следующим образом:

gh = login(token=gc.ACCESS_TOKEN)
user = gh.user()
for repo in gh.iter_user_repos(user):

Короче говоря, мне интересно, каков рекомендуемый метод получения всех коммитов для всех репозиториев, к которым у пользователя есть доступ.

1 ответ

Решение

Там нет ничего плохого в iter_repos с авторизованным GitHub пример.

Вкратце вот что происходит (это описано в документации github3.py): при перечислении ресурса из API GitHub фактически возвращаются не все атрибуты. Если вам нужна вся информация, вы должны запросить информацию для каждого коммита. Короче говоря, ваш код должен выглядеть так:

gh = login(token=gc.ACCESS_TOKEN)
for repo in gh.iter_repos():
    for commit in repo.iter_commits():
        commit.refresh()
        print(commit.additions)
        print(commit.deletions)
        # etc.
Другие вопросы по тегам