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

Unified Diff: tools/telemetry/telemetry/web_components/viewer.py

Issue 183973020: [telemetry] Add ability to read data previously written to HTML (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nitfix Created 6 years, 9 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
« no previous file with comments | « no previous file | tools/telemetry/telemetry/web_components/viewer_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/web_components/viewer.py
diff --git a/tools/telemetry/telemetry/web_components/viewer.py b/tools/telemetry/telemetry/web_components/viewer.py
index 001ad56cc2353530badc6261208bc85a221b2d75..b5e6db129c081f9dcfc93609444440ed557314fb 100644
--- a/tools/telemetry/telemetry/web_components/viewer.py
+++ b/tools/telemetry/telemetry/web_components/viewer.py
@@ -2,6 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import HTMLParser
+import json
import os
import string
@@ -61,3 +63,46 @@ class Viewer(object):
f, load_sequence,
title='Telemetry results',
extra_scripts=[bootstrap_script, ViewerDataScript(self)])
+
+ @staticmethod
+ def ReadDataObjectFromViewerFile(f):
+ """Reads the data inside a viewer file written with WriteViewerToFile
+
+ Returns None if the viewer data wasn't found, the JSON.parse'd object on
+ success. Raises exception if the viewer data was corrupt.
+ """
+ class MyHTMLParser(HTMLParser.HTMLParser):
+ def __init__(self):
+ HTMLParser.HTMLParser.__init__(self)
+ self._got_data_tag = False
+ self._in_data_tag = False
+ self._data_records = []
+
+ def handle_starttag(self, tag, attrs):
+ if tag != 'script':
+ return
+ id_attr = dict(attrs).get('id', None)
+ if id_attr == 'viewer-data':
+ assert not self._got_data_tag
+ self._got_data_tag = True
+ self._in_data_tag = True
+
+ def handle_endtag(self, tag):
+ self._in_data_tag = False
+
+ def handle_data(self, data):
+ if self._in_data_tag:
+ self._data_records.append(data)
+
+ @property
+ def data(self):
+ if not self._got_data_tag:
+ raise Exception('Missing <script> with #data-view')
+ if self._in_data_tag:
+ raise Exception('Missing </script> on #data-view')
+ return json.loads(''.join(self._data_records))
+
+ parser = MyHTMLParser()
+ for line in f:
+ parser.feed(line)
+ return parser.data
« no previous file with comments | « no previous file | tools/telemetry/telemetry/web_components/viewer_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698