"""Help collect and process results for submission
"""
+from collections import MutableMapping
import os
import logging
LOGGER = logging.getLogger(__name__)
-class ResultMap(object):
+class ResultMap(MutableMapping):
"""Store list of results
"""
def __init__(self):
self.results_order = []
self.results = {}
- def keys(self):
- return self.results_order
+ def __iter__(self):
+ for item in self.results_order:
+ yield item
- def values(self):
- return ( self.results[r] for r in self.results_order )
+ def __len__(self):
+ l = len(self.results)
+ assert l == len(self.results_order)
+ return l
- def items(self):
- return ( (r, self.results[r]) for r in self.results_order )
+ def __setitem__(self, key, value):
+ self.results_order.append(key)
+ self.results[key] = value
def __getitem__(self, key):
return self.results[key]
+ def __delitem__(self, key):
+ del self.results[key]
+ i = self.results_order.index(key)
+ del self.results_order[i]
+
def add_results_from_file(self, filename):
pathname = os.path.abspath(filename)
basepath, name = os.path.split(pathname)
for lib_id, lib_path in results:
if not os.path.isabs(lib_path):
lib_path = os.path.join(basepath, lib_path)
- self.add_result(lib_id, lib_path)
-
- def add_result(self, lib_id, lib_path):
- self.results_order.append(lib_id)
- self.results[lib_id] = lib_path
+ self[lib_id] = lib_path
def make_tree_from(self, source_path, destpath = None):
"""Create a tree using data files from source path.
def tearDown(self):
shutil.rmtree(self.tempdir)
-
def test_dict_like(self):
"""Make sure the result map works like an ordered dictionary
"""
results = ResultMap()
- results.add_result('1000', 'dir1000')
- results.add_result('2000', 'dir2000')
- results.add_result('1500', 'dir1500')
+ results['1000'] = 'dir1000'
+ results['2000'] = 'dir2000'
+ results['1500'] = 'dir1500'
self.failUnlessEqual(results.keys(), ['1000', '2000', '1500'])
self.failUnlessEqual(list(results.values()),
self.failUnlessEqual(results['1500'], 'dir1500')
self.failUnlessEqual(results['2000'], 'dir2000')
+ self.assertTrue(u'2000' in results)
+ self.assertTrue('2000' in results)
+ self.assertFalse(u'77777' in results)
+ self.assertFalse('77777' in results)
+
def test_make_from(self):
results = ResultMap()
- results.add_result('1000', S1_NAME)
- results.add_result('2000', S2_NAME)
+ results['1000'] = S1_NAME
+ results['2000'] = S2_NAME
results.make_tree_from(self.sourcedir, self.resultdir)