def getSystemPPDs(): major, minor, patch = getVersionTuple() ppds = {} # {'ppd name' : 'desc', ...} if major == 1 and minor < 2: ppd_dir = sys_conf.get('dirs', 'ppd') log.debug("(CUPS 1.1.x) Searching for PPDs in: %s" % ppd_dir) for f in utils.walkFiles(ppd_dir, pattern="HP*ppd*;hp*ppd*", abs_paths=True): desc = getPPDDescription(f) if not ('foo2' in desc or 'gutenprint' in desc.lower() or 'gutenprint' in f): ppds[f] = desc log.debug("%s: %s" % (f, desc)) else: # 1.2.x log.debug("(CUPS 1.2.x) Getting list of PPDs using CUPS_GET_PPDS...") ppd_dict = cupsext.getPPDList() cups_ppd_path = getPPDPath() # usually /usr/share/cups/model foomatic_ppd_path = sys_conf.get('dirs', 'ppdbase', '/usr/share/ppd') if not foomatic_ppd_path or not os.path.exists(foomatic_ppd_path): foomatic_ppd_path = '/usr/share/ppd' log.debug("CUPS PPD base path = %s" % cups_ppd_path) log.debug("Foomatic PPD base path = %s" % foomatic_ppd_path) for ppd in ppd_dict: if not ppd: continue if 'hp-' in ppd.lower() or 'hp_' in ppd.lower() and \ ppd_dict[ppd]['ppd-make'] == 'HP': desc = ppd_dict[ppd]['ppd-make-and-model'] if not ('foo2' in desc.lower() or 'gutenprint' in desc.lower() or 'gutenprint' in ppd): # PPD files returned by CUPS_GET_PPDS (and by lpinfo -m) # can be relative to /usr/share/ppd/ or to # /usr/share/cups/model/. Not sure why this is. # Here we will try both and see which one it is... if os.path.exists(ppd): path = ppd else: try: path = os.path.join(foomatic_ppd_path, ppd) except AttributeError: # happens on some boxes with provider: style ppds (foomatic: etc) path = ppd else: if not os.path.exists(path): try: path = os.path.join(cups_ppd_path, ppd) except AttributeError: path = ppd else: if not os.path.exists(path): path = ppd # foomatic: or some other driver ppds[path] = desc #log.debug("%s: %s" % (path, desc)) return ppds