Github API: получить «тело» для всех новых выпусков в Python - PullRequest
1 голос
/ 20 октября 2019

У меня есть сценарий Python, который выбирает обновления для GitHub и отображает примечания к исправлениям для последней версии.

Мне бы хотелось, чтобы сценарий отображал примечания к исправлениям для всех выпусков вперед. текущей версии / выпуска.

Мои версии github имеют следующую версию: v1.2.3

Этот код, который я сейчас использую, отображает примечания к исправлениям только для последнего выпуска:

version = 2.1.5

import urllib.request, json

with urllib.request.urlopen("https://api.github.com/repos/:author/:repo/releases/latest") as url:
  data = json.loads(url.read().decode())
  latest = data['tag_name'][1:] # "v2.3.6" -> "2.3.6"
  patchNotes = data['body']

if latest > version:
    print('\nUpdate available!')
    print(f'Latest Version: v{latest}')
    print('\n'+str(patchNotes)+'\n') #display latest (v2.3.6) patch notes
    input(str('Update now? [Y/n] ')).upper()
    #code to download the latest version

Мне пришла идея получить то, что мне нужно:

  1. Получить все номера версий релизов (например, 1.2.3)
  2. Добавитьвсе номера версий, которые идут впереди текущего в массиве
  3. Для версии в массиве получить data[body] с соответствующей страницы jith github-api
  4. Распечатать примечания к исправлению в правильном порядке (от самой старой (на одну версию впереди текущей) до самой новой (последняя версия)

Я не знаю, как реализовать вышеуказанную идею и есть ли более эффективные способы достижения того, к чему я стремлюсьЯ открыт для предложений.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Вы можете использовать что-то вроде этого:

import requests
from packaging import version

maxVersion = version.parse("3.9.2")
repoWithOwner= "labstack/echo"

r = requests.get("https://api.github.com/repos/{}/releases?per_page=100".format(repoWithOwner))
releases = [ 
    (t["tag_name"],t["body"]) 
    for t in r.json() 
    if version.parse(t["tag_name"]) >= maxVersion
][::-1]

for r in releases:
    print("{} : {}".format(r[0],r[1]))

Получает 100 последних выпусков и проверяет, что это>> {указанная вами версия}, перевернуть массив и напечатать тег & body

0 голосов
/ 21 октября 2019

Вдохновленный @ ответом Бертран Мартел , отредактированный для моих нужд

Я использовал предустановленные библиотеки Python 3 urllib.request и json (чтобы он был более переносимым) и f-strings вместо .format

import urllib.request, json

ver='3.0.0' #Current scripts version
author='labstack'
repo='echo'

release = json.loads(urllib.request.urlopen(f'https://api.github.com/repos/{author}/{repo}/releases?per_page=5').read().decode())
releases = [
    (data['tag_name'],data['body'])
    for data in release
    if data['tag_name'] > ver][::-1]
for release in releases:
    print(f'{release[0]}:\n{release[1]}\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...