| 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
|
|
|