Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Unified Diff: tools/metrics/ukm/model.py

Issue 2769223005: Create a UKM descriptions XML file (Closed)
Patch Set: Incorporate feedback Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..f0c7ebeabf2cb1e288a6678ede4a51176773096a
--- /dev/null
+++ b/tools/metrics/ukm/model.py
@@ -0,0 +1,61 @@
+# 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 os
+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)

Powered by Google App Engine
This is Rietveld 408576698