Source code for insights.parsers.cups_confs

"""
CUPS configuration files
========================

Parsers provided by this module are:

CupsdConf - file ``/etc/cups/cupsd.conf``
-----------------------------------------
CupsFilesConf - file ``/etc/cups/cups-files.conf``
--------------------------------------------------
"""

from insights.core import Parser, ConfigParser
from insights.core.plugins import parser
from insights.specs import Specs
from insights.parsers import get_active_lines
from insights.parsers.httpd_conf import DocParser
from insights.core.exceptions import ParseException
from insights.parsr.query import Entry


class CupsdConfBase(DocParser):

    def __call__(self, content):
        try:
            return self.Top(content)
        except Exception:
            raise ParseException("There was an exception when parsing the cupsd.conf file")


[docs] @parser(Specs.cupsd_conf) class CupsdConf(ConfigParser): """ Class for parsing the file ``/etc/cups/cupsd.conf`` Sample file content:: MaxLogSize 0 LogLevel warn Listen localhost:631 Listen /var/run/cups/cups.sock Browsing On BrowseLocalProtocols dnssd <Location /> Order allow,deny </Location> <Policy default> JobPrivateAccess default JobPrivateValues default SubscriptionPrivateAccess default SubscriptionPrivateValues default <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document> Require user @OWNER @SYSTEM Order deny,allow </Limit> <Limit All> Order deny,allow </Limit> </Policy> Examples: >>> type(cupsd_conf) <class 'insights.parsers.cups_confs.CupsdConf'> >>> cupsd_conf['MaxLogSize'][-1].value 0 >>> cupsd_conf['Listen'][0].value 'localhost:631' >>> cupsd_conf['Listen'][-1].value '/var/run/cups/cups.sock' >>> cupsd_conf[('Location', '/')]['Order'][-1].value 'allow,deny' >>> cupsd_conf[('Policy','default')][('Limit','Send-Document')]['Order'][0].value 'deny,allow' >>> 'JobPrivateAccess' in cupsd_conf[('Policy','default')] True """ def __init__(self, *args, **kwargs): self.parse = CupsdConfBase(self) super(CupsdConf, self).__init__(*args, **kwargs) def parse_doc(self, content): if isinstance(content, list): content = "\n".join(content) result = self.parse(content)[0] return Entry(children=result, src=self)
[docs] @parser(Specs.cups_files_conf) class CupsFilesConf(Parser, dict): """ Class for parsing the file ``/etc/cups/cups-files.conf`` Sample file content:: FatalErrors config SyncOnClose Yes SystemGroup sys root wheel AccessLog syslog ErrorLog syslog PageLog syslog Examples: >>> type(cups_files_conf) <class 'insights.parsers.cups_confs.CupsFilesConf'> >>> cups_files_conf['FatalErrors'] 'config' >>> cups_files_conf['SyncOnClose'] 'Yes' >>> 'wheel' in cups_files_conf['SystemGroup'] True """
[docs] def parse_content(self, content): if not content: raise ParseException('Empty Content') for line in get_active_lines(content): k, v = [i.strip() for i in line.split(None, 1)] if k not in self: self[k] = v if len(v.split()) == 1 else v.split() else: _v = self[k] _v = [_v] if not isinstance(_v, list) else _v if v not in _v: _v.append(v) self[k] = _v