Esempio n. 1
0
    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
Esempio n. 2
0
    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)]