Chromium Code Reviews| Index: tools/metrics/ukm/model.py |
| diff --git a/tools/metrics/ukm/model.py b/tools/metrics/ukm/model.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0c2432cf01c342756a664c2a8a7e3bbcb8260464 |
| --- /dev/null |
| +++ b/tools/metrics/ukm/model.py |
| @@ -0,0 +1,64 @@ |
| +# Copyright 2017 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| +# """Model objects for ukm.xml contents.""" |
| + |
| +import logging |
|
rkaplow
2017/04/03 03:12:51
also unneeded import
Steven Holte
2017/04/04 18:20:51
Done.
|
| +import operator |
| +import os |
| +import re |
| +import sys |
| + |
| +sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common')) |
| +import models |
| + |
| +# Model definitions for ukm.xml content |
| +_OBSOLETE_TYPE = models.TextNodeType('obsolete') |
| +_OWNER_TYPE = models.TextNodeType('owner', single_line=True) |
| +_SUMMARY_TYPE = models.TextNodeType('summary') |
| + |
| +_LOWERCASE_NAME_FN = lambda n: n.attributes['name'].value.lower() |
| + |
| +_METRIC_TYPE = models.ObjectNodeType( |
| + 'metric', |
| + attributes=[('name', unicode)], |
| + children=[ |
| + models.ChildType('obsolete', _OBSOLETE_TYPE, False), |
| + models.ChildType('owners', _OWNER_TYPE, True), |
| + models.ChildType('summary', _SUMMARY_TYPE, False), |
| + ]) |
| + |
| +_EVENT_TYPE = models.ObjectNodeType( |
| + 'event', |
| + alphabetization=('metric', _LOWERCASE_NAME_FN), |
| + attributes=[('name', unicode)], |
| + extra_newlines=(1, 1, 1), |
| + children=[ |
| + models.ChildType('obsolete', _OBSOLETE_TYPE, False), |
| + models.ChildType('owners', _OWNER_TYPE, True), |
| + models.ChildType('summary', _SUMMARY_TYPE, False), |
| + models.ChildType('metrics', _METRIC_TYPE, True), |
| + ]) |
| + |
| +_UKM_CONFIGURATION_TYPE = models.ObjectNodeType( |
| + 'ukm-configuration', |
| + extra_newlines=(2, 1, 1), |
| + indent=False, |
| + children=[ |
| + models.ChildType('events', _EVENT_TYPE, 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) |