children=[ models.ChildType('metrics', _RAPPOR_METRIC_TYPE, True), ]) _RAPPOR_CONFIGURATION_TYPE = models.ObjectNodeType( 'rappor-configuration', extra_newlines=(1, 1, 1), dont_indent=True, children=[ models.ChildType('noiseLevels', _NOISE_LEVELS_TYPE, False), models.ChildType('parameterTypes', _RAPPOR_PARAMETERS_TYPES_TYPE, False), models.ChildType('metrics', _RAPPOR_METRICS_TYPE, False), ]) RAPPOR_XML_TYPE = models.DocumentType(_RAPPOR_CONFIGURATION_TYPE) def GetTypeNames(config): return set(p['name'] for p in config['parameterTypes']['types']) def GetMissingOwnerErrors(metrics): """Check that all of the metrics have owners. Args: metrics: A list of rappor metric description objects. Returns: A list of errors about metrics missing owners. """
multiple=False), models.ChildType('metrics', _METRIC_TYPE, multiple=True), ]) _UKM_CONFIGURATION_TYPE = models.ObjectNodeType( 'ukm-configuration', alphabetization=[('event', _LOWERCASE_NAME_FN)], extra_newlines=(2, 1, 1), indent=False, children=[ models.ChildType('events', _EVENT_TYPE, multiple=True), ]) UKM_XML_TYPE = models.DocumentType(_UKM_CONFIGURATION_TYPE) def UpdateXML(original_xml): """Parses the original xml and return a pretty printed version. Args: original_xml: A string containing the original xml file contents. Returns: A pretty-printed xml string, or None if the config contains errors. """ config = UKM_XML_TYPE.Parse(original_xml) return UKM_XML_TYPE.PrettyPrint(config)
multiple=True), ]) CONFIGURATION_TYPE = models.ObjectNodeType( 'structured-metrics', alphabetization=[ (_EVENTS_TYPE.tag, lambda _: 1), (_PROJECTS_TYPE.tag, lambda _: 2), ], extra_newlines=(2, 1, 1), indent=False, children=[ models.ChildType(_EVENTS_TYPE.tag, _EVENTS_TYPE, multiple=False), models.ChildType(_PROJECTS_TYPE.tag, _PROJECTS_TYPE, multiple=False), ]) XML_TYPE = models.DocumentType(CONFIGURATION_TYPE) def PrettifyXML(original_xml): """Parses the original xml and return a pretty printed version. Args: original_xml: A string containing the original xml file contents. Returns: A pretty-printed xml string, or None if the config contains errors. """ config = XML_TYPE.Parse(original_xml) return XML_TYPE.PrettyPrint(config)
(_ENUMS_TYPE.tag, _KEEP_ORDER), (_HISTOGRAMS_TYPE.tag, _KEEP_ORDER), (_HISTOGRAM_SUFFIXES_LIST_TYPE.tag, _KEEP_ORDER), ], extra_newlines=(2, 1, 1), indent=False, children=[ models.ChildType(_ENUMS_TYPE.tag, _ENUMS_TYPE, multiple=False), models.ChildType(_HISTOGRAMS_TYPE.tag, _HISTOGRAMS_TYPE, multiple=False), models.ChildType(_HISTOGRAM_SUFFIXES_LIST_TYPE.tag, _HISTOGRAM_SUFFIXES_LIST_TYPE, multiple=False), ]) HISTOGRAM_CONFIGURATION_XML_TYPE = models.DocumentType( _HISTOGRAM_CONFIGURATION_TYPE) def PrettifyTree(input_tree): """Parses the tree representation of the XML and return a pretty-printed version. Args: input_tree: A tree representation of the XML, which might take the form of an ET tree or minidom doc. Returns: A pretty-printed xml string, or None if the config contains errors. """ histograms = HISTOGRAM_CONFIGURATION_XML_TYPE.Parse(input_tree) return HISTOGRAM_CONFIGURATION_XML_TYPE.PrettyPrint(histograms)
_ACTIONS_TYPE = models.ObjectNodeType( 'actions', alphabetization=[ (_ACTION_TYPE.tag, _LOWERCASE_FN('name')), (_ACTION_SUFFIX_TYPE.tag, lambda n: None), ], extra_newlines=(2, 1, 1), indent=False, children=[ models.ChildType(_ACTION_TYPE.tag, _ACTION_TYPE, multiple=True), models.ChildType(_ACTION_SUFFIX_TYPE.tag, _ACTION_SUFFIX_TYPE, multiple=True), ]) ACTION_XML_TYPE = models.DocumentType(_ACTIONS_TYPE) def PrettifyTree(minidom_doc): """Parses the input minidom document and return a pretty-printed version. Args: minidom_doc: A minidom document. Returns: A pretty-printed xml string, or None if the config contains errors. """ actions = ACTION_XML_TYPE.Parse(minidom_doc) return ACTION_XML_TYPE.PrettyPrint(actions)