def load_exps(): explist = [] for root, dirs, files in os.walk(EXP_HOME): if EXP_CONF in files: oldpath = sys.path[:] sys.path.insert(0, root) mod = __import__(EXP_CONF[:-3]) sys.path = oldpath match = lambda x: inspect.isclass(x) and x is not VecExp and issubclass(x, VecExp) for name, cls in inspect.getmembers(mod, match): expname = '%s/%s'%(os.path.relpath(root, EXP_HOME), cls.__name__) cls.EXPID = '%s:%s'%(get_config('exp-prefix'), expname) for name, cls in inspect.getmembers(mod, match): expname = '%s/%s'%(os.path.relpath(root, EXP_HOME), cls.__name__) expobj = cls() expobj._task = {} expobj._task['name'] = expname set_config('exp-object', expobj, cls.EXPID) for methodname, method in inspect.getmembers(expobj, predicate=inspect.ismethod): if methodname.startswith('set_'): expobj._task[methodname[4:]] = method() explist.append(expobj) set_config('exp-object-list', explist, None)
def load_tasks(self, cmd, params, args): """implements loader interface, return (tasks, config)""" return generate_tasks(get_config('exp-prefix'), self._gen_tasks()), self.DOIT_CONFIG
def _gen_tasks(self): for expobj in get_config('exp-object-list'): yield expobj._task