nvchecker/nvchecker-old/source/repology.py
2020-08-11 17:43:03 +08:00

33 lines
804 B
Python

# MIT licensed
# Copyright (c) 2019 lilydjwg <lilydjwg@gmail.com>, et al.
import structlog
import functools
from . import session
logger = structlog.get_logger(logger_name=__name__)
API_URL = 'https://repology.org/api/v1/project/{}'
async def get_version(name, conf, **kwargs):
project = conf.get('repology') or name
repo = conf.get('repo')
if not repo:
logger.error('repo field is required for repology source', name = name)
url = API_URL.format(project)
data = await _request(url)
versions = [pkg['version'] for pkg in data if pkg['repo'] == repo]
if not versions:
logger.error('package is not found', name=name, repo=repo)
return
return versions[0]
@functools.lru_cache()
async def _request(url):
async with session.get(url) as res:
return await res.json()