示例#1
0
def identify(package, product, base, ascii):
    """List products that include specified package."""
    rpm = RPM.from_name(package)
    if not rpm:
        error_exit(
            f"{package} does not appear to be in valid <name>-<version>-<release>.<arch>[.rpm]"
        )
    products = None
    conn = sqlite3.connect(db)
    query_values = rpm.to_dict()
    query_values["base_product"] = base
    query_values["product"] = product
    with conn:
        cur = conn.cursor()
        if product == "*" and base == "*":
            cur.execute(sccpdb.search_products_by_rpm, query_values)
        elif base != "*":
            cur.execute(sccpdb.create_product_family_temp_table, query_values)
            cur.execute(sccpdb.search_product_family_by_rpm, query_values)
        else:
            cur.execute(sccpdb.search_product_by_rpm, query_values)
        products = cur.fetchall()
        cur.close()
    conn.close()
    output = pretty_table(
        products,
        colnames=["id", "product", "type", "arch", "description"],
        fmt="ascii" if ascii else "csv",
    )
    print("\n".join(output))
示例#2
0
def main(base, rpmlist):
    """
    Identify product(s) associated with a base containing an RPM.

    \b
    Legend:
      ? Doesn't appear to be "<name>-<version>-<release>.<arch>[.rpm]".
      - Not found in base product.
      = Found in repo of base product.
      + From a module or extension that can be enabled on base.
    """
    db = f"{config['DEFAULT']['data_dir']}/{config['SCCP']['db_name']}"
    if not sccpdb.checkdb(db):
        error_exit("Please initialise SCCP database with sccpsync.py.")
    conn = sqlite3.connect(db)
    with conn:
        cur = conn.cursor()
        try:
            rpm_list = read_rpm_list(rpmlist)
        except FileNotFoundError:
            error_exit(f"{rpmlist} does not appear to exit.")
        cur.execute(sccpdb.create_product_family_temp_table,
                    {"base_product": base})
        for line in rpm_list:
            rpm = RPM.from_name(line)
            prods = []
            if not rpm:
                key = "?"
            else:
                cur.execute(sccpdb.search_product_family_by_rpm, rpm.to_dict())
                prods = [p[1] for p in cur.fetchall()]
                if prods:
                    if base in prods:
                        key = "="
                    else:
                        key = "+"
                else:
                    key = "-"
            print(f"{key} {rpm}")
            for prod in prodsort(prods, base):
                print(f"    {str(prod)}")
            print()
        cur.close()
    conn.close()
示例#3
0
def test_rpm_invalids():
    for s in rpm_list_invalids:
        assert type(RPM.from_name(s)) == type(None)
示例#4
0
def test_rpm_name_strip_noise():
    """Parse rpm names with edge white space and .rpm extension"""
    for s in rpm_list_sorted:
        assert s == str(RPM.from_name(f" \t  {s}.rpm\t\t\t   "))
示例#5
0
def test_rpm_name_clean():
    for s in rpm_list_sorted:
        assert s == str(RPM.from_name(s))