From 35ed136e44f33ea4ad1cd6dd4002ddf5d865d1d0 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sun, 14 Apr 2013 15:00:30 -0500 Subject: [PATCH] timeside/analyzer/core.py: add AnalyzerResultContainer --- tests/test_AnalyzerResult.py | 24 +++--- timeside/analyzer/core.py | 153 +++++++++++++++++++---------------- 2 files changed, 96 insertions(+), 81 deletions(-) diff --git a/tests/test_AnalyzerResult.py b/tests/test_AnalyzerResult.py index b9e4be2..40c1cec 100755 --- a/tests/test_AnalyzerResult.py +++ b/tests/test_AnalyzerResult.py @@ -43,9 +43,9 @@ class TestAnalyzerResultNumpy(TestAnalyzerResult): """ test AnalyzerResult numpy serialize """ def tearDown(self): - results = [self.result] - r_numpy = data_to_numpy(results, '/tmp/t.npy') - d_numpy = data_from_numpy('/tmp/t.npy') + results = AnalyzerResultContainer([self.result]) + r_numpy = results.to_numpy('/tmp/t.npy') + d_numpy = results.from_numpy('/tmp/t.npy') if verbose: print '%15s' % 'from numpy:', print d_numpy @@ -55,12 +55,12 @@ class TestAnalyzerResultNumpy(TestAnalyzerResult): class TestAnalyzerResultYaml(TestAnalyzerResult): """ test AnalyzerResult yaml serialize """ def tearDown(self): - results = [self.result] - r_yaml = data_to_yaml(results) + results = AnalyzerResultContainer([self.result]) + r_yaml = results.to_yaml() if verbose: print 'to yaml:' print r_yaml - d_yaml = data_from_yaml(r_yaml) + d_yaml = results.from_yaml(r_yaml) if verbose: print '%15s' % 'from yaml:', print d_yaml @@ -70,13 +70,13 @@ class TestAnalyzerResultYaml(TestAnalyzerResult): class TestAnalyzerResultXml(TestAnalyzerResult): """ test AnalyzerResult xml serialize """ def tearDown(self): - results = [self.result] - r_xml = data_to_xml(results) + results = AnalyzerResultContainer([self.result]) + r_xml = results.to_xml() if verbose: print 'to xml:' print r_xml - d_xml = data_from_xml(r_xml) + d_xml = results.from_xml(r_xml) if verbose: print '%15s' % 'from xml:', print d_xml @@ -87,13 +87,13 @@ class TestAnalyzerResultXml(TestAnalyzerResult): class TestAnalyzerResultJson(TestAnalyzerResult): """ test AnalyzerResult json serialize """ def tearDown(self): - results = [self.result] - r_json = data_to_json(results) + results = AnalyzerResultContainer([self.result]) + r_json = results.to_json() if verbose: print 'to json:' print r_json - d_json = data_from_json(r_json) + d_json = results.from_json(r_json) if verbose: print d_json print '%15s' % 'from yaml:', diff --git a/timeside/analyzer/core.py b/timeside/analyzer/core.py index e0c1c45..d875604 100644 --- a/timeside/analyzer/core.py +++ b/timeside/analyzer/core.py @@ -19,6 +19,7 @@ # Authors: # Guillaume Pellerin +# Paul Brossier class AnalyzerResult(object): @@ -43,72 +44,86 @@ class AnalyzerResult(object): return False return True -def data_to_xml(data_list): - import xml.dom.minidom - doc = xml.dom.minidom.Document() - root = doc.createElement('telemeta') - doc.appendChild(root) - for data in data_list: - node = doc.createElement('data') - node.setAttribute('name', data.name) - node.setAttribute('id', data.id) - node.setAttribute('unit', data.unit) - node.setAttribute('value', str(data.value)) - if type(data.value) != type(str()) and type(data.value) != type(unicode()): - node.setAttribute('str', '0') - root.appendChild(node) - return xml.dom.minidom.Document.toprettyxml(doc) - -def data_from_xml(xml_string): - import xml.dom.minidom - doc = xml.dom.minidom.parseString(xml_string) - root = doc.getElementsByTagName('telemeta')[0] - results = [] - for child in root.childNodes: - if child.nodeType != child.ELEMENT_NODE: continue - child_dict = {} - for a in ['name', 'id', 'unit', 'value']: - child_dict[a] = str(child.getAttribute(a)) - if child.getAttribute('str') == '0': - try: - child_dict['value'] = eval(child_dict['value']) - except Exception, e: - print e - results.append(child_dict) - return results - -def data_to_json(data_list): - import simplejson as json - data_strings = [] - for data in data_list: - data_dict = {} - for a in ['name', 'id', 'unit', 'value']: - data_dict[a] = getattr(data,a) - data_strings.append(data_dict) - return json.dumps(data_strings) - -def data_from_json(json_str): - import simplejson as json - return json.loads(json_str) - -def data_to_yaml(data_list): - import yaml - data_strings = [] - for f in data_list: - f_dict = {} - for a in ['name', 'id', 'unit', 'value']: - f_dict[a] = getattr(f,a) - data_strings.append(f_dict) - return yaml.dump(data_strings, default_flow_style=False) - -def data_from_yaml(yaml_str): - import yaml - return yaml.load(yaml_str) - -def data_to_numpy(data_list, output_file = None): - import numpy - numpy.save(output_file, data_list) - -def data_from_numpy(input_file): - import numpy - return numpy.load(input_file) +class AnalyzerResultContainer(object): + + def __init__(self, analyzer_results): + self.results = analyzer_results + + def __getitem__(self, i): + return self.results[i] + + def __len__(self): + return len(self.results) + + def to_xml(self, data_list = None): + if data_list == None: data_list = self.results + import xml.dom.minidom + doc = xml.dom.minidom.Document() + root = doc.createElement('telemeta') + doc.appendChild(root) + for data in data_list: + node = doc.createElement('data') + node.setAttribute('name', data.name) + node.setAttribute('id', data.id) + node.setAttribute('unit', data.unit) + node.setAttribute('value', str(data.value)) + if type(data.value) != type(str()) and type(data.value) != type(unicode()): + node.setAttribute('str', '0') + root.appendChild(node) + return xml.dom.minidom.Document.toprettyxml(doc) + + def from_xml(self, xml_string): + import xml.dom.minidom + doc = xml.dom.minidom.parseString(xml_string) + root = doc.getElementsByTagName('telemeta')[0] + results = [] + for child in root.childNodes: + if child.nodeType != child.ELEMENT_NODE: continue + child_dict = {} + for a in ['name', 'id', 'unit', 'value']: + child_dict[a] = str(child.getAttribute(a)) + if child.getAttribute('str') == '0': + try: + child_dict['value'] = eval(child_dict['value']) + except Exception, e: + print e + results.append(child_dict) + return results + + def to_json(self, data_list = None): + if data_list == None: data_list = self.results + import simplejson as json + data_strings = [] + for data in data_list: + data_dict = {} + for a in ['name', 'id', 'unit', 'value']: + data_dict[a] = getattr(data,a) + data_strings.append(data_dict) + return json.dumps(data_strings) + + def from_json(self, json_str): + import simplejson as json + return json.loads(json_str) + + def to_yaml(self, data_list = None): + if data_list == None: data_list = self.results + import yaml + data_strings = [] + for f in data_list: + f_dict = {} + for a in ['name', 'id', 'unit', 'value']: + f_dict[a] = getattr(f,a) + data_strings.append(f_dict) + return yaml.dump(data_strings, default_flow_style=False) + + def from_yaml(self, yaml_str): + import yaml + return yaml.load(yaml_str) + + def to_numpy(data_list, output_file = None): + import numpy + numpy.save(output_file, data_list) + + def from_numpy(self, input_file): + import numpy + return numpy.load(input_file) -- 2.39.5