def list_updates_from_errata(errata): """ :param errata: A list of errata dict """ us = sorted(U.uconcat(e.get("updates", []) for e in errata), key=itemgetter("name")) return [sorted(g, cmp=rpmkit.rpmutils.pcmp, reverse=True)[0] for g in sgroupby(us, itemgetter("name"))]
def make_excl_packages_list(ppaths, gpaths, profkey="system_profile"): """ :param ppaths: A list of profile data dirs :param gpaths: A list of package group data dirs """ (ppaths, gpaths) = init_ppaths_and_gpaths(ppaths, gpaths) prof_data = _DATA_0 for ppath in ppaths: prof_data = load_profiles(ppath, prof_data) pgrps = list(load_package_groups_data_g(gpaths, {profkey: prof_data})) excludes = RU.uconcat(g["install_pkgs"] for g in pgrps) removes = RU.uconcat(g["remove_pkgs"] for g in pgrps) logging.info("Excldues: %d, Removes: %d" % (len(excludes), len(removes))) return (excludes, removes)
def list_updates_from_errata(errata): """ :param errata: A list of errata dict """ us = sorted(U.uconcat(e.get("updates", []) for e in errata), key=itemgetter("name")) return [ sorted(g, cmp=rpmkit.rpmutils.pcmp, reverse=True)[0] for g in sgroupby(us, itemgetter("name")) ]
def list_num_of_es_for_updates(es): """ List number of specific type of errata for each package names. :param es: List of reference errata of specific type (and severity) :return: [(package_name :: str, num_of_relevant_errata :: Int)] """ unes = U.uconcat([(u["name"], e) for u in e["updates"]] for e in es) uess = [(k, [ue[1]["advisory"] for ue in g]) for k, g in itertools.groupby(unes, itemgetter(0))] return sorted(((un, len(es)) for un, es in uess), key=itemgetter(1), reverse=True)