def load_list(self,yml,filename): # make a dict from the k/v pairs in yml where type(v) is a scalar (string or number) scalars=scalar_values(yml) scalars['filename']=filename readset_objs=[] errors=[] rlist=yml['readsets'] if type(rlist) != type([]): # make sure rlist is a list raise ConfigError("%s: type of 'readsets' must be a list; got '%s'" % (filename, type(rlist))) for ryml in rlist: if type(ryml)!=type({}): # make sure elements of rlist are dicts raise ConfigError("%s: elements of readsets must be dicts (hashes); got '%s'" % (filename, type(ryml))) ryml.update(scalars) try: rs=self.load_glob(ryml,filename)[0] except ConfigError as ce: errors.append(str(ce)) continue rs.update(scalars) readset_objs.append(rs) if len(errors)>0: raise ConfigError("%s:\n"%filename+"\n".join(errors)) return readset_objs
def load_glob(self,yml,filename): try: reads_files=yml['reads_file'] except KeyError: try: reads_files=yml['reads_files'] except KeyError: raise ConfigError("%s: readset does not define reads_file(s)" % filename) # get the reads directory, if present try: reads_dir=yml['reads_dir'] except KeyError: reads_dir=os.getcwd() # fixme: hope this is right thing to do # hack? reads_dir=evoque_template(reads_dir, RnaseqGlobals.config['rnaseq']) # in case of ${root_dir} #print "lg: reads_dir is %s" % reads_dir files=[] globlist=re.split('[\s,]+',reads_files) missing=[] for fglob in globlist: if not os.path.isabs(fglob): fglob=os.path.normpath(os.path.join(reads_dir, fglob)) filelist=glob.glob(fglob) if len(files)==0: missing.append("%s: no matching files for %s" % (filename, fglob)) files.extend(filelist) if len(files)==0: msg=", ".join(missing) raise ConfigError(msg) # Make the Readset object: #print "load_glob: files is %s" % files scalars=scalar_values(yml) scalars['filename']=filename scalars['reads_files']=files return [Readset(scalars)]