"""Help collect and process results for submission
"""
+from collections import MutableMapping
import os
+import shutil
import logging
from collections import namedtuple
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):
+ def make_tree_from(self, source_path, destpath = None, link=True):
"""Create a tree using data files from source path.
"""
- print source_path, destpath
if destpath is None:
destpath = os.getcwd()
+ LOGGER.debug("Source_path: %s", source_path)
+ LOGGER.debug("Dest_path: %s", destpath)
for lib_id in self.results_order:
lib_path = self.results[lib_id]
+ LOGGER.debug("lib_path: %s", lib_path)
+ if os.path.isabs(lib_path):
+ lib_path = os.path.relpath(lib_path, destpath)
+
+ LOGGER.debug('lib_path: %s', lib_path)
lib_destination = os.path.join(destpath, lib_path)
if not os.path.exists(lib_destination):
LOGGER.info("Making dir {0}".format(lib_destination))
source_rel_dir = os.path.join(source_path, lib_path)
source_lib_dir = os.path.abspath(source_rel_dir)
+ LOGGER.debug("source_lib_dir: %s", source_lib_dir)
- print "source_lib_dir", source_lib_dir
for filename in os.listdir(source_lib_dir):
source_pathname = os.path.join(source_lib_dir, filename)
target_pathname = os.path.join(lib_destination, filename)
if not os.path.exists(source_pathname):
raise IOError(
"{0} does not exist".format(source_pathname))
- print target_pathname
- if not os.path.exists(target_pathname):
- os.symlink(source_pathname, target_pathname)
+ if not (os.path.exists(target_pathname) or os.path.isdir(source_pathname)):
+ if link:
+ os.symlink(source_pathname, target_pathname)
+ else:
+ shutil.copy(source_pathname, target_pathname)
LOGGER.info(
'LINK {0} to {1}'.format(source_pathname,
target_pathname))