# Copyright 2011-2014 Splunk, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"): you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. try: import xml.etree.cElementTree as ET except ImportError as ie: import xml.etree.ElementTree as ET from utils import parse_xml_data class ValidationDefinition(object): """This class represents the XML sent by Splunk for external validation of a new modular input. **Example**:: ``v = ValidationDefinition()`` """ def __init__(self): self.metadata = {} self.parameters = {} def __eq__(self, other): if not isinstance(other, ValidationDefinition): return False return self.metadata == other.metadata and self.parameters == other.parameters @staticmethod def parse(stream): """Creates a ``ValidationDefinition`` from a provided stream containing XML. The XML typically will look like this: ```` `` myHost`` `` https://127.0.0.1:8089`` `` 123102983109283019283`` `` /opt/splunk/var/lib/splunk/modinputs`` `` `` `` value1`` `` `` `` value2`` `` value3`` `` value4`` `` `` `` `` ```` :param stream: ``Stream`` containing XML to parse. :return definition: A ``ValidationDefinition`` object. """ definition = ValidationDefinition() # parse XML from the stream, then get the root node root = ET.parse(stream).getroot() for node in root: # lone item node if node.tag == "item": # name from item node definition.metadata["name"] = node.get("name") definition.parameters = parse_xml_data(node, "") else: # Store anything else in metadata definition.metadata[node.tag] = node.text return definition