Получить дату последнего коммита, используя библиотеку PyGitHub - PullRequest
1 голос
/ 21 марта 2020

Я разрабатываю сценарий python, который требует, чтобы я получил список всех членов организации GitHub, которые долгое время не выполняли коммиты для любого репозитория организации. Таким образом, мы хотели бы найти неактивных участников и удалить их из организации.

Любые идеи о том, как получить дату последней фиксации члена с использованием библиотеки PyGitHub?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Используйте API принятия коммита поиска и отфильтруйте репо вашей организации с помощью параметра org:

GET https://api.github.com/search/commits?q=[SEARCH REQUEST]

Вам нужно использовать заголовок Accept: application/vnd.github.cloak-preview, чтобы использовать этот API , Далее приведены все коммиты, сделанные в репозитории, принадлежащем указанной организации c для указанного пользователя c, и отсортированы по последним первым:

curl -s -H "Accept: application/vnd.github.cloak-preview" \
    https://api.github.com/search/commits?q=author:fgette%20org:BboxLab%20sort:author-date-desc

Затем можно отфильтровать дату наиболее недавний коммит в этой организации:

curl -s -H "Accept: application/vnd.github.cloak-preview" \
    https://api.github.com/search/commits?q=author:fgette%20org:BboxLab%20sort:author-date-desc | \
    jq -r '.items[0].commit.author.date'

Используя , вы могли бы использовать следующее, чтобы проверить, уступает ли самый последний коммит крайнему сроку (здесь <12 месяцев) : </p>

from github import Github
from datetime import date
from datetime import datetime
from dateutil.relativedelta import relativedelta

deadline = datetime.combine(
    date.today() + relativedelta(months=-12), 
    datetime.min.time()
)

g = Github("YOUR_TOKEN", per_page = 1)

commits = g.search_commits(
    query = 'author:fgette org:BboxLab sort:author-date-desc'
)

data = commits.get_page(0)

if (len(data) > 0):
    last_commit = data[0].commit.author.date
    print(f'last commit : {last_commit}')
    if (last_commit < deadline):
        print("too old :(")
    else:
        print("ok :)")

Вывод:

последний коммит: 2019-03-06 15: 29: 26

слишком старый: (* ​​1024 *

0 голосов
/ 21 марта 2020

Объект репозитория имеет API get_commits. У него есть параметр author. Вы можете использовать идентификатор пользователя или адрес электронной почты автора и получить все коммиты для этого конкретного автора для конкретного репозитория.

После этого вам нужно сравнить полученные временные метки и выяснить дату и время последнего принятия.

Это выходной формат, возвращаемый API. https://developer.github.com/v3/repos/commits/

API do c: https://pygithub.readthedocs.io/en/latest/github_objects/Repository.html#github .Repository.Repository.get_commits

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...