def verifyCriteriaDict(schema, criteria_dict, db, table=AIdb.MANIFESTS_TABLE): """ Used for verifying and loading criteria from a dictionary of criteria. Args: schema - path to schema file for criteria manifest. criteria_dict - dictionary of criteria to verify, in the form of { criteria: value, criteria: value, ... } db - database object for install service table - database table, distinguishing manifests from profiles Raises IOError: * if the schema does not open ValueError: * if the criteria_dict dictionary is empty * if the XML is invalid according to the schema AssertionError: * if a value in the dictionary is empty Returns: A valid XML DOM of the criteria and all MAC and IPV4 values are formatted according to verifyXML.prepValuesAndRanges(). """ schema = open(schema, 'r') if not criteria_dict: raise ValueError("Error:\tCriteria dictionary empty: %s\n" % criteria_dict) root = lxml.etree.Element("ai_criteria_manifest") for name, value_or_range in criteria_dict.iteritems(): if value_or_range is None: raise AssertionError(_("Error: Missing value for criteria " "'%s'") % name) crit = lxml.etree.SubElement(root, "ai_criteria") crit.set("name", name) # If criteria is a range, split on "-" and add to # XML DOM as a range element. if AIdb.isRangeCriteria(db.getQueue(), name, table): # Split on "-" range_value = value_or_range.split('-', 1) # If there was only a single value, means user specified # this range criteria as a single value, add it as a single # value if len(range_value) == 1: value_elem = lxml.etree.SubElement(crit, "value") value_elem.text = value_or_range else: range_elem = lxml.etree.SubElement(crit, "range") range_elem.text = " ".join(range_value) else: value_elem = lxml.etree.SubElement(crit, "value") value_elem.text = value_or_range # Verify the generated criteria DOM root, errors = verifyXML.verifyRelaxNGManifest(schema, StringIO.StringIO(lxml.etree.tostring(root))) if errors: raise ValueError(_("Error: Criteria failed validation:\n\t%s") % errors.message) try: verifyXML.prepValuesAndRanges(root, db, table) except ValueError, err: raise ValueError(_("Error:\tCriteria error: %s") % err)
def verifyCriteriaDict(schema, criteria_dict, db, table=AIdb.MANIFESTS_TABLE): """ Used for verifying and loading criteria from a dictionary of criteria. Args: schema - path to schema file for criteria manifest. criteria_dict - dictionary of criteria to verify, in the form of { criteria: value, criteria: value, ... } db - database object for install service table - database table, distinguishing manifests from profiles Raises IOError: * if the schema does not open ValueError: * if the criteria_dict dictionary is empty * if the XML is invalid according to the schema AssertionError: * if a value in the dictionary is empty Returns: A valid XML DOM of the criteria and all MAC and IPV4 values are formatted according to verifyXML.prepValuesAndRanges(). """ schema = open(schema, 'r') if not criteria_dict: raise ValueError("Error:\tCriteria dictionary empty: %s\n" % criteria_dict) root = lxml.etree.Element("ai_criteria_manifest") for name, value_or_range in criteria_dict.iteritems(): if value_or_range is None: raise AssertionError( _("Error: Missing value for criteria " "'%s'") % name) crit = lxml.etree.SubElement(root, "ai_criteria") crit.set("name", name) # If criteria is a range, split on "-" and add to # XML DOM as a range element. if AIdb.isRangeCriteria(db.getQueue(), name, table): # Split on "-" range_value = value_or_range.split('-', 1) # If there was only a single value, means user specified # this range criteria as a single value, add it as a single # value if len(range_value) == 1: value_elem = lxml.etree.SubElement(crit, "value") value_elem.text = value_or_range else: range_elem = lxml.etree.SubElement(crit, "range") range_elem.text = " ".join(range_value) else: value_elem = lxml.etree.SubElement(crit, "value") value_elem.text = value_or_range # Verify the generated criteria DOM root, errors = verifyXML.verifyRelaxNGManifest( schema, StringIO.StringIO(lxml.etree.tostring(root))) if errors: raise ValueError( _("Error: Criteria failed validation:\n\t%s") % errors.message) try: verifyXML.prepValuesAndRanges(root, db, table) except ValueError, err: raise ValueError(_("Error:\tCriteria error: %s") % err)
"AI or SC manifest tags: %s") % criteria_path) ai_sc_list.append(elem) elem.getparent().remove(elem) # Verify the remaing DOM, which should only contain criteria root, errors = (verifyXML.verifyRelaxNGManifest(schema, StringIO.StringIO(lxml.etree.tostring(crit.getroot())))) logging.debug('criteria file passed RNG validation') if errors: raise ValueError(_("Error:\tFile %s failed validation:\n" "\tline %s: %s") % (criteria_path, errors.line, errors.message)) try: verifyXML.prepValuesAndRanges(root, db, table) except ValueError, err: raise ValueError(_("Error:\tCriteria manifest error: %s") % err) # Reinsert AI and SC elements back into the criteria_root DOM. for ai_sc_element in ai_sc_list: root.getroot().append(ai_sc_element) return root def verifyCriteriaDict(schema, criteria_dict, db, table=AIdb.MANIFESTS_TABLE): """ Used for verifying and loading criteria from a dictionary of criteria. Args: schema - path to schema file for criteria manifest. criteria_dict - dictionary of criteria to verify, in the form
_("Error:\tCriteria file should not contain " "AI or SC manifest tags: %s") % criteria_path) ai_sc_list.append(elem) elem.getparent().remove(elem) # Verify the remaing DOM, which should only contain criteria root, errors = (verifyXML.verifyRelaxNGManifest( schema, StringIO.StringIO(lxml.etree.tostring(crit.getroot())))) logging.debug('criteria file passed RNG validation') if errors: raise ValueError( _("Error:\tFile %s failed validation:\n" "\tline %s: %s") % (criteria_path, errors.line, errors.message)) try: verifyXML.prepValuesAndRanges(root, db, table) except ValueError, err: raise ValueError(_("Error:\tCriteria manifest error: %s") % err) # Reinsert AI and SC elements back into the criteria_root DOM. for ai_sc_element in ai_sc_list: root.getroot().append(ai_sc_element) return root def verifyCriteriaDict(schema, criteria_dict, db, table=AIdb.MANIFESTS_TABLE): """ Used for verifying and loading criteria from a dictionary of criteria. Args: schema - path to schema file for criteria manifest. criteria_dict - dictionary of criteria to verify, in the form