コード例 #1
0
ファイル: step.py プロジェクト: iandriver/Rnaseq
    def sh_script(self, context, **args):
        
        if 'echo_name' in args and args['echo_name']:
            echo_part="\n# step %s:\n" % self.name
            echo_part+="echo step %s 1>&2" % self.name
        else:
            echo_part=''
            
        try: usage=self.usage(context) 
        except KeyError as ke:
            raise ConfigError("missing config item '%s'" % ke)

        
        # check for missing attrs after calling step.usage()
        missing_attrs=self.missing_required_attrs()
        if len(missing_attrs) > 0:
            raise ConfigError("step %s: missing attributes: %s" % (self.name, ', '.join(missing_attrs)))


        vars={}
        vars.update(self.__dict__)
        vars.update(self.pipeline.readset)
        if not self.is_prov_step:
            vars.update(self.pipeline[self.name])
            vars['inputs']=context.inputs[self.name]
            vars['outputs']=context.outputs[self.name]

        vars['pipeline']=self.pipeline
        vars['pipeline_run_id']=context.pipeline_run_id
        #vars['step_run_id']=context.step_runs[self.name].id
        #vars['next_step_run_id']=context.step_runs[self.pipeline.step_after(step.name)].id
        vars['config']=RnaseqGlobals.config
        vars['readset']=self.pipeline.readset

        # need to add shell variables for 'set': (in cufflinks.s_?.sh scripts)
        # currently root_dir, programs, reads_file, ID, format, readlen
        # but really, the pipeline should specify these?
        # or only things that are truly universal
        vars['root_dir']=RnaseqGlobals.root_dir()

        # add readset exports:
        readset=self.pipeline.readset
        for attr in readset.exports:
            try: vars[attr]=getattr(readset, attr)
            except AttributeError:
                vars[attr]=''
                #warn("%s.sh_script: no '%s' readset attribute!" % (self.name, attr))

        # add self.exports:
        try: export_list=self.exports
        except: export_list=[]
        for attr in export_list:
            vars[attr]=getattr(self,attr)

        try: script_part=evoque_template(usage, vars)
        except Exception as e: raise ConfigError("step %s: %s" % (self.name, e))
        
        script="\n".join([echo_part,script_part]) # tried using echo_part+sh_script, got weird '>' -> '>' substitutions

        return script
コード例 #2
0
ファイル: test_basic.py プロジェクト: iandriver/Rnaseq
    def test_missing_value(self):
        template="This has a ${missing} value"
        vars={'not_missing':1}
        try:
            string=evoque_template(template, vars)
            self.fail()
        except exceptions.NameError as e:
#            warn("caught %s (%s)" % (e, type(e)))
            self.assertRegexpMatches(str(e), "name 'missing' is not defined")
コード例 #3
0
ファイル: readset.py プロジェクト: iandriver/Rnaseq
    def evoque_fields(self):
        vars=self.__dict__
        vars.update(RnaseqGlobals.conf_value('rnaseq'))
        
        for a in dir(self):
            if a.startswith('__'): continue
            attr=getattr(self,a)
            if type(attr) != type(''): continue
            if not re.search('\$\{', attr): continue

            try: setattr(self, a, evoque_template(attr, vars))
            except NameError: pass

        return self
コード例 #4
0
ファイル: readset.py プロジェクト: iandriver/Rnaseq
    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)]
コード例 #5
0
ファイル: test_basic.py プロジェクト: iandriver/Rnaseq
 def test_basic(self):
     template="This is a ${adjective} template"
     vars={'adjective': 'simple'}
     string=evoque_template(template, vars)
     self.assertEqual(string, 'This is a simple template')
コード例 #6
0
ファイル: step.py プロジェクト: iandriver/Rnaseq
 def output_list_expanded(self):
     l=[evoque_template(x, self, self.pipeline.readset) for x in self.output_list()]
     return l