class CommandRunner: """ """ def __init__( self, job , jobState = None ): """ instanciate a L{CommandBuilder} and use it to build the CommandLine, then run it @param service: @type job: a L{Job} instance @param jobState: @type jobState: @call: l{Job.run} @todo: implementation pour le warper de cgi ou WS a faire """ self.job = job self.job_dir = self.job.getDir() self._service = self.job.getService() if jobState is None: self._jobState = JobState( self.job_dir ) else: self._jobState = jobState commandBuilder = CommandBuilder() method = self._service.getCommand()[1].upper() if method == '' or method == 'LOCAL': try: cmd = commandBuilder.buildLocalCommand( self._service ) self._commandLine = cmd[ 'cmd' ] self._xmlEnv = cmd[ 'env' ] paramfiles = cmd[ 'paramfiles' ] except Exception ,err : msg = "an error occured during the command line building: " self._logError( userMsg = "Mobyle Internal Server Error", logMsg = None #the error log is filled by the rf_log.critical ) #this error is already log in build.log msg = "%s/%s : %s" %( self._service.getName() , self.job.getKey() , msg , ) if self.job.cfg.debug( self._service.getName() ) == 0: rf_log.critical( msg , exc_info = True) # send an email else: rf_log.error( msg , exc_info = True) raise MobyleError , "Mobyle Internal Server Error" js_paramfiles = [] if paramfiles : for paramfile_name , string_handle in paramfiles.items(): paramfile_handle = open( os.path.join( self.job_dir , paramfile_name ) , 'w' ) content = string_handle.getvalue() paramfile_handle.write( content ) paramfile_handle.close() js_paramfiles.append( ( os.path.basename( paramfile_name ) , len( content ) ) ) self._jobState.setParamfiles( js_paramfiles ) self._jobState.commit() elif method == "GET" or method == "POST" or method == "POSTM": raise NotImplementedError ,"cgi wrapping is not yet implemented"