From 19553c35642642481871e8fa79699f267203dbc4 Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Fri, 14 Aug 2020 20:04:05 +0800 Subject: [PATCH] create an api for modules --- NEW | 1 - nvchecker/api.py | 9 +++++++++ nvchecker/util.py | 4 ++-- nvchecker_source/android_sdk.py | 2 +- nvchecker_source/archpkg.py | 9 ++------- nvchecker_source/aur.py | 17 ++++++++--------- nvchecker_source/bitbucket.py | 2 +- nvchecker_source/cmd.py | 2 +- nvchecker_source/debianpkg.py | 2 +- nvchecker_source/none.py | 13 +++++++------ nvchecker_source/pacman.py | 2 +- nvchecker_source/regex.py | 7 +------ nvchecker_source/repology.py | 2 +- nvchecker_source/sparkle.py | 2 +- nvchecker_source/ubuntupkg.py | 2 +- nvchecker_source/vcs.py | 5 +---- 16 files changed, 38 insertions(+), 43 deletions(-) create mode 100644 nvchecker/api.py diff --git a/NEW b/NEW index 917953a..a029b18 100644 --- a/NEW +++ b/NEW @@ -3,4 +3,3 @@ TODO: * update tests * update README * create source plugin documentation - * move things to a seperate `api.py` diff --git a/nvchecker/api.py b/nvchecker/api.py new file mode 100644 index 0000000..0a57541 --- /dev/null +++ b/nvchecker/api.py @@ -0,0 +1,9 @@ +# MIT licensed +# Copyright (c) 2020 lilydjwg , et al. + +from .httpclient import session # type: ignore +from .core import GetVersionError +from .util import ( + Entry, BaseWorker, RawResult, VersionResult, +) +from .sortversion import sort_version_keys diff --git a/nvchecker/util.py b/nvchecker/util.py index 98082e9..f0244b2 100644 --- a/nvchecker/util.py +++ b/nvchecker/util.py @@ -16,7 +16,7 @@ from pathlib import Path import toml import structlog -from .httpclient import session +from .httpclient import session # type: ignore logger = structlog.get_logger(logger_name=__name__) @@ -92,7 +92,7 @@ class AsyncCache(Generic[T, S]): async def get_json(self, url: str) -> Any: return await self.get( - ('_jsonurl', url), self._get_json) + ('_jsonurl', url), self._get_json) # type: ignore async def get( self, diff --git a/nvchecker_source/android_sdk.py b/nvchecker_source/android_sdk.py index da4fc64..ff382c6 100644 --- a/nvchecker_source/android_sdk.py +++ b/nvchecker_source/android_sdk.py @@ -6,7 +6,7 @@ import os import re from xml.etree import ElementTree -from nvchecker.httpclient import session +from nvchecker.api import session _ANDROID_REPO_MANIFESTS = { 'addon': 'https://dl.google.com/android/repository/addon2-1.xml', diff --git a/nvchecker_source/archpkg.py b/nvchecker_source/archpkg.py index d6bc379..2f6efec 100644 --- a/nvchecker_source/archpkg.py +++ b/nvchecker_source/archpkg.py @@ -1,11 +1,7 @@ # MIT licensed # Copyright (c) 2013-2020 lilydjwg , et al. -import structlog - -from nvchecker.httpclient import session # type: ignore - -logger = structlog.get_logger(logger_name=__name__) +from nvchecker.api import session, GetVersionError URL = 'https://www.archlinux.org/packages/search/json/' @@ -21,8 +17,7 @@ async def get_version(name, conf, *, cache, **kwargs): data = await cache.get(pkg, request) if not data['results']: - logger.error('Arch package not found', name=name) - return + raise GetVersionError('Arch package not found') r = [r for r in data['results'] if r['repo'] != 'testing'][0] diff --git a/nvchecker_source/aur.py b/nvchecker_source/aur.py index e0a23a6..4d141b4 100644 --- a/nvchecker_source/aur.py +++ b/nvchecker_source/aur.py @@ -1,15 +1,14 @@ # MIT licensed # Copyright (c) 2013-2020 lilydjwg , et al. -import structlog from datetime import datetime import asyncio from typing import Iterable, Dict, List, Tuple, Any, Optional -from nvchecker.util import Entry, BaseWorker, RawResult -from nvchecker.httpclient import session # type: ignore - -logger = structlog.get_logger(logger_name=__name__) +from nvchecker.api import ( + session, GetVersionError, VersionResult, + Entry, BaseWorker, RawResult, +) AUR_URL = 'https://aur.archlinux.org/rpc/' @@ -77,21 +76,21 @@ class Worker(BaseWorker): async def _run_batch_impl( batch: List[Tuple[str, Entry]], aur_results: AurResults, -) -> Dict[str, str]: +) -> Dict[str, VersionResult]: aurnames = {conf.get('aur', name) for name, conf in batch} results = await aur_results.get_multiple(aurnames) - ret = {} + ret: Dict[str, VersionResult] = {} for name, conf in batch: aurname = conf.get('aur', name) use_last_modified = conf.get('use_last_modified', False) - strip_release = conf.get('strip-release', False) + strip_release = conf.get('strip_release', False) result = results.get(aurname) if result is None: - logger.error('AUR upstream not found', name=name) + ret[name] = GetVersionError('AUR upstream not found') continue version = result['Version'] diff --git a/nvchecker_source/bitbucket.py b/nvchecker_source/bitbucket.py index 56e01e1..e639d8a 100644 --- a/nvchecker_source/bitbucket.py +++ b/nvchecker_source/bitbucket.py @@ -1,7 +1,7 @@ # MIT licensed # Copyright (c) 2013-2020 lilydjwg , et al. -from nvchecker.sortversion import sort_version_keys +from nvchecker.api import sort_version_keys # doc: https://confluence.atlassian.com/display/BITBUCKET/commits+or+commit+Resource BITBUCKET_URL = 'https://bitbucket.org/api/2.0/repositories/%s/commits/%s' diff --git a/nvchecker_source/cmd.py b/nvchecker_source/cmd.py index bf72c22..4aaa9c5 100644 --- a/nvchecker_source/cmd.py +++ b/nvchecker_source/cmd.py @@ -5,7 +5,7 @@ import asyncio import structlog -from nvchecker.util import GetVersionError +from nvchecker.api import GetVersionError logger = structlog.get_logger(logger_name=__name__) diff --git a/nvchecker_source/debianpkg.py b/nvchecker_source/debianpkg.py index 7d51e04..232151b 100644 --- a/nvchecker_source/debianpkg.py +++ b/nvchecker_source/debianpkg.py @@ -2,7 +2,7 @@ # Copyright (c) 2020 lilydjwg , et al. # Copyright (c) 2017 Felix Yan , et al. -from nvchecker.util import GetVersionError +from nvchecker.api import GetVersionError URL = 'https://sources.debian.org/api/src/%(pkgname)s/?suite=%(suite)s' diff --git a/nvchecker_source/none.py b/nvchecker_source/none.py index 6dd7cdc..6bcda99 100644 --- a/nvchecker_source/none.py +++ b/nvchecker_source/none.py @@ -3,13 +3,14 @@ from __future__ import annotations -import structlog -from nvchecker.util import BaseWorker - -logger = structlog.get_logger(logger_name=__name__) +from nvchecker.api import ( + BaseWorker, GetVersionError, RawResult, +) class Worker(BaseWorker): async def run(self) -> None: + exc = GetVersionError('no source specified') async with self.acquire_token(): - for name, _ in self.tasks: - logger.error('no source specified', name=name) + for name, conf in self.tasks: + self.result_q.put( + RawResult(name, exc, conf)) diff --git a/nvchecker_source/pacman.py b/nvchecker_source/pacman.py index c99a3cb..00026da 100644 --- a/nvchecker_source/pacman.py +++ b/nvchecker_source/pacman.py @@ -1,7 +1,7 @@ # MIT licensed # Copyright (c) 2013-2020 lilydjwg , et al. -from . import cmd +from nvchecker_source import cmd # type: ignore async def get_version(name, conf, **kwargs): referree = conf.get('pacman') or name diff --git a/nvchecker_source/regex.py b/nvchecker_source/regex.py index 66a7f65..a1e28ee 100644 --- a/nvchecker_source/regex.py +++ b/nvchecker_source/regex.py @@ -4,12 +4,7 @@ import re import sre_constants -import structlog - -from nvchecker.httpclient import session -from nvchecker.util import GetVersionError - -logger = structlog.get_logger(logger_name=__name__) +from nvchecker.api import session, GetVersionError async def get_version(name, conf, *, cache, **kwargs): key = sorted(conf.items()) diff --git a/nvchecker_source/repology.py b/nvchecker_source/repology.py index 10c187b..3fe3dd1 100644 --- a/nvchecker_source/repology.py +++ b/nvchecker_source/repology.py @@ -1,7 +1,7 @@ # MIT licensed # Copyright (c) 2019 lilydjwg , et al. -from nvchecker.util import GetVersionError +from nvchecker.api import GetVersionError API_URL = 'https://repology.org/api/v1/project/{}' diff --git a/nvchecker_source/sparkle.py b/nvchecker_source/sparkle.py index 5e3bfc1..b7e5660 100644 --- a/nvchecker_source/sparkle.py +++ b/nvchecker_source/sparkle.py @@ -4,7 +4,7 @@ from xml.etree import ElementTree -from nvchecker.httpclient import session +from nvchecker.api import session async def get_version(name, conf, *, cache, **kwargs): sparkle = conf['sparkle'] diff --git a/nvchecker_source/ubuntupkg.py b/nvchecker_source/ubuntupkg.py index 6645013..8525737 100644 --- a/nvchecker_source/ubuntupkg.py +++ b/nvchecker_source/ubuntupkg.py @@ -2,7 +2,7 @@ # Copyright (c) 2020 lilydjwg , et al. # Copyright (c) 2017 Felix Yan , et al. -from nvchecker.util import GetVersionError +from nvchecker.api import GetVersionError URL = 'https://api.launchpad.net/1.0/ubuntu/+archive/primary?ws.op=getPublishedSources&source_name=%s&exact_match=true' diff --git a/nvchecker_source/vcs.py b/nvchecker_source/vcs.py index 4c1d2d4..a351f61 100644 --- a/nvchecker_source/vcs.py +++ b/nvchecker_source/vcs.py @@ -4,11 +4,8 @@ import asyncio import os.path as _path -import structlog +from nvchecker.api import GetVersionError -from nvchecker.util import GetVersionError - -logger = structlog.get_logger(logger_name=__name__) _self_path = _path.dirname(_path.abspath(__file__)) _cmd_prefix = ['/bin/bash', _path.join(_self_path, 'vcs.sh')]