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))
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()
def test_rpm_invalids(): for s in rpm_list_invalids: assert type(RPM.from_name(s)) == type(None)
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 "))
def test_rpm_name_clean(): for s in rpm_list_sorted: assert s == str(RPM.from_name(s))