feat: return full results from result processing

This commit is contained in:
David Arnold 2024-03-08 14:22:57 +01:00 committed by David
parent 9dd7fb1736
commit f29bdee6a3
No known key found for this signature in database
GPG key ID: AB15A6AF1101390D
4 changed files with 12 additions and 10 deletions

View file

@ -13,7 +13,7 @@ from pathlib import Path
import structlog import structlog
from . import core from . import core
from .util import VersData, RawResult, KeyManager, EntryWaiter from .util import ResultData, RawResult, KeyManager, EntryWaiter
from .ctxvars import proxy as ctx_proxy from .ctxvars import proxy as ctx_proxy
logger = structlog.get_logger(logger_name=__name__) logger = structlog.get_logger(logger_name=__name__)
@ -80,24 +80,24 @@ def main() -> None:
if sys.version_info >= (3, 10): if sys.version_info >= (3, 10):
# Python 3.10 has deprecated asyncio.get_event_loop # Python 3.10 has deprecated asyncio.get_event_loop
newvers, has_failures = asyncio.run(run(result_coro, runner_coro)) results, has_failures = asyncio.run(run(result_coro, runner_coro))
else: else:
# Python < 3.10 will create an eventloop when asyncio.Queue is initialized # Python < 3.10 will create an eventloop when asyncio.Queue is initialized
newvers, has_failures = asyncio.get_event_loop().run_until_complete(run(result_coro, runner_coro)) results, has_failures = asyncio.get_event_loop().run_until_complete(run(result_coro, runner_coro))
if options.ver_files is not None: if options.ver_files is not None:
newverf = options.ver_files[1] newverf = options.ver_files[1]
vers = core.read_verfile(newverf) vers = core.read_verfile(newverf)
vers.update(newvers) vers.update({k: r.version for k, r in results.items()})
core.write_verfile(newverf, vers) core.write_verfile(newverf, vers)
if args.failures and has_failures: if args.failures and has_failures:
sys.exit(3) sys.exit(3)
async def run( async def run(
result_coro: Coroutine[None, None, Tuple[VersData, bool]], result_coro: Coroutine[None, None, Tuple[ResultData, bool]],
runner_coro: Coroutine[None, None, None], runner_coro: Coroutine[None, None, None],
) -> Tuple[VersData, bool]: ) -> Tuple[ResultData, bool]:
result_fu = asyncio.create_task(result_coro) result_fu = asyncio.create_task(result_coro)
runner_fu = asyncio.create_task(runner_coro) runner_fu = asyncio.create_task(runner_coro)
await runner_fu await runner_fu

View file

@ -394,7 +394,7 @@ async def process_result(
result_q: Queue[RawResult], result_q: Queue[RawResult],
entry_waiter: EntryWaiter, entry_waiter: EntryWaiter,
verbose: bool = False, verbose: bool = False,
) -> Tuple[VersData, bool]: ) -> Tuple[ResultData, bool]:
ret = {} ret = {}
has_failures = False has_failures = False
try: try:
@ -411,7 +411,7 @@ async def process_result(
continue continue
check_version_update(oldvers, r1, verbose) check_version_update(oldvers, r1, verbose)
entry_waiter.set_result(r1.name, r1.version) entry_waiter.set_result(r1.name, r1.version)
ret[r1.name] = r1.version ret[r1.name] = r1
except asyncio.CancelledError: except asyncio.CancelledError:
return ret, has_failures return ret, has_failures

View file

@ -153,6 +153,8 @@ class Result(NamedTuple):
gitref: Optional[str] gitref: Optional[str]
revision: Optional[str] revision: Optional[str]
ResultData = Dict[str, Result]
class BaseWorker: class BaseWorker:
'''The base class for defining `Worker` classes for source plugins. '''The base class for defining `Worker` classes for source plugins.

View file

@ -47,8 +47,8 @@ async def run(
result_coro = core.process_result(oldvers, result_q, entry_waiter) result_coro = core.process_result(oldvers, result_q, entry_waiter)
runner_coro = core.run_tasks(futures) runner_coro = core.run_tasks(futures)
vers, _has_failures = await main.run(result_coro, runner_coro) results, _has_failures = await main.run(result_coro, runner_coro)
return vers return {k: r.version for k, r in results.items()}
@pytest_asyncio.fixture(scope="session") @pytest_asyncio.fixture(scope="session")
async def get_version(): async def get_version():