Source code for pkgcore.operations.regen
from snakeoil.compatibility import IGNORED_EXCEPTIONS
from ..package.errors import MetadataException
from ..util.thread_pool import map_async
[docs]
def regen_iter(iterable, regen_func, observer):
for pkg in iterable:
try:
regen_func(pkg)
except IGNORED_EXCEPTIONS as e:
if isinstance(e, KeyboardInterrupt):
return
raise
except MetadataException:
# handled at a higher level by scanning for metadata masked pkgs
# after regen has completed
pass
except Exception as e:
yield pkg, e
[docs]
def regen_repository(repo, pkgs, observer, threads=1, pkg_attr="keywords", **kwargs):
helpers = []
def _get_repo_helper():
if not hasattr(repo, "_regen_operation_helper"):
return lambda pkg: getattr(pkg, "keywords")
# for an actual helper, track it and invoke .finish if it exists.
helper = repo._regen_operation_helper(**kwargs)
helpers.append(helper)
return helper
def get_args():
return (_get_repo_helper(), observer)
errors = map_async(pkgs, regen_iter, threads=threads, per_thread_args=get_args)
# yield any errors that occurred during metadata generation
yield from errors