Source code for insights.parsers.cups_ppd

"""
CupsPpd - files ``/etc/cups/ppd/*``
===================================

Parser to parse the content of files ``/etc/cups/ppd/*``
"""
from insights.core import Parser
from insights.core.exceptions import SkipComponent
from insights.core.plugins import parser
from insights.specs import Specs


[docs] @parser(Specs.cups_ppd) class CupsPpd(Parser, dict): """ Class to parse ``/etc/cups/ppd/*`` files. Sample output for files:: *PPD-Adobe: "4.3" *% Copyright 2007-2014 by Apple Inc. *% Copyright: 1997-2007 by Easy Software Products. *FormatVersion: "4.3" *FileVersion: "2.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ippeve.ppd" *Manufacturer: "Canon" *ModelName: "iR-ADV C3525/3530 PPD" *Product: "(iR-ADV C3525/3530 PPD)" *NickName: "iR-ADV C3525/3530 PPD" *ShortNickName: "iR-ADV C3525/3530 PPD" *cupsFilter2: "application/vnd.cups-pdf application/pdf 10 -" *cupsFilter2: "application/vnd.cups-postscript application/postscript 10 -" Examples: >>> type(cups_ppd) <class 'insights.parsers.cups_ppd.CupsPpd'> >>> cups_ppd["PCFileName"] '"ippeve.ppd"' >>> cups_ppd["cupsFilter2"] ['"application/vnd.cups-pdf application/pdf 10 -"', '"application/vnd.cups-postscript application/postscript 10 -"'] """
[docs] def parse_content(self, content): if not content: raise SkipComponent("No Valid Configuration") data = {} for line in content: if line.startswith("*") and ":" in line and not line.startswith("*%"): key = line.split(":")[0].split("*")[-1].strip() value = line.split(":")[-1].strip() if key in data: if isinstance(data[key], list): data[key].append(value) else: data[key] = [data[key], value] else: data[key] = value if not data: raise SkipComponent("No Valid Configuration") self.update(data)