@@ -37,6 +37,7 @@ from getdeveloperlib import parse_developers # noqa: E402
INFRA_RE = re.compile(r"\$\(eval \$\(([a-z-]*)-package\)\)")
URL_RE = re.compile(r"\s*https?://\S*\s*$")
+DEFAULT_RM_API_ENDPOINT = "https://release-monitoring.org/api"
RM_API_STATUS_ERROR = 1
RM_API_STATUS_FOUND_BY_DISTRO = 2
RM_API_STATUS_FOUND_BY_PATTERN = 3
@@ -523,8 +524,8 @@ def check_package_latest_version_set_status(pkg, status, version, identifier):
pkg.status['version'] = ('ok', 'up-to-date')
-async def check_package_get_latest_version_by_distro(session, pkg, retry=True):
- url = "https://release-monitoring.org/api/project/Buildroot/%s" % pkg.name
+async def check_package_get_latest_version_by_distro(rm_url, session, pkg, retry=True):
+ url = f"{rm_url}/project/Buildroot/{pkg.name}"
try:
async with session.get(url) as resp:
if resp.status != 200:
@@ -545,13 +546,13 @@ async def check_package_get_latest_version_by_distro(session, pkg, retry=True):
except (aiohttp.ClientError, asyncio.TimeoutError):
if retry:
- return await check_package_get_latest_version_by_distro(session, pkg, retry=False)
+ return await check_package_get_latest_version_by_distro(rm_url, session, pkg, retry=False)
else:
return False
-async def check_package_get_latest_version_by_guess(session, pkg, retry=True):
- url = "https://release-monitoring.org/api/projects/?pattern=%s" % pkg.name
+async def check_package_get_latest_version_by_guess(rm_url, session, pkg, retry=True):
+ url = f"{rm_url}/projects/?pattern={pkg.name}"
try:
async with session.get(url) as resp:
if resp.status != 200:
@@ -576,7 +577,7 @@ async def check_package_get_latest_version_by_guess(session, pkg, retry=True):
except (aiohttp.ClientError, asyncio.TimeoutError):
if retry:
- return await check_package_get_latest_version_by_guess(session, pkg, retry=False)
+ return await check_package_get_latest_version_by_guess(rm_url, session, pkg, retry=False)
else:
return False
@@ -584,16 +585,16 @@ async def check_package_get_latest_version_by_guess(session, pkg, retry=True):
check_latest_count = 0
-async def check_package_latest_version_get(session, pkg, npkgs, verbose=False):
+async def check_package_latest_version_get(rm_url, session, pkg, npkgs, verbose=False):
global check_latest_count
- if await check_package_get_latest_version_by_distro(session, pkg):
+ if await check_package_get_latest_version_by_distro(rm_url, session, pkg):
check_latest_count += 1
if verbose:
print("[%04d/%04d] %s" % (check_latest_count, npkgs, pkg.name))
return
- if await check_package_get_latest_version_by_guess(session, pkg):
+ if await check_package_get_latest_version_by_guess(rm_url, session, pkg):
check_latest_count += 1
if verbose:
print("[%04d/%04d] %s" % (check_latest_count, npkgs, pkg.name))
@@ -607,7 +608,7 @@ async def check_package_latest_version_get(session, pkg, npkgs, verbose=False):
print("[%04d/%04d] %s" % (check_latest_count, npkgs, pkg.name))
-async def check_package_latest_version(packages, verbose=False):
+async def check_package_latest_version(rm_url, packages, verbose=False):
"""
Fills in the .latest_version field of all Package objects
@@ -630,7 +631,7 @@ async def check_package_latest_version(packages, verbose=False):
async with aiohttp.ClientSession(connector=connector, trust_env=True) as sess:
packages = [p for p in packages if p.is_actual_package]
for pkg in packages:
- tasks.append(asyncio.ensure_future(check_package_latest_version_get(sess, pkg, len(packages), verbose=verbose)))
+ tasks.append(asyncio.ensure_future(check_package_latest_version_get(rm_url, sess, pkg, len(packages), verbose=verbose)))
await asyncio.wait(tasks)
@@ -1303,6 +1304,9 @@ def parse_args():
help='List of packages (comma separated)')
parser.add_argument('--nvd-path', dest='nvd_path',
help='Path to the local NVD database', type=resolvepath)
+ parser.add_argument('--upstream-url', dest='upstream_url',
+ help='Upstream API endpoint to use',
+ default=DEFAULT_RM_API_ENDPOINT)
parser.add_argument('--disable', type=list_str,
help='Features to disable, comma-separated (cve, upstream, url, warnings)',
default=[])
@@ -1317,6 +1321,9 @@ def parse_args():
def __main__():
global cvecheck
+ loop = asyncio.new_event_loop()
+ asyncio.set_event_loop(loop)
+
args = parse_args()
if args.nvd_path:
@@ -1365,7 +1372,7 @@ def __main__():
if "upstream" not in args.disable:
print("Getting latest versions ...")
loop = asyncio.get_event_loop()
- loop.run_until_complete(check_package_latest_version(packages, verbose=args.verbose))
+ loop.run_until_complete(check_package_latest_version(args.upstream_url, packages, verbose=args.verbose))
if "cve" not in args.disable and args.nvd_path:
print("Checking packages CVEs")
check_package_cves(args.nvd_path, packages)
Provide the ability for a caller to override the API endpoint used for upstream checks. This can be helpful for environments which support a reverse proxy for caching an Anitya target. Signed-off-by: James Knight <git@jdknight.me> --- support/scripts/pkg-stats | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-)