class LocalJobFacade(JobFacade): """ LocalJobFacade is a class that is an access point to a Mobyle Job on the local server. """ def submit(self, session=None): """ submits the job on the local server @param session: the session used to load infile values @type session: Mobyle.Session @return: job information as a dictionary @rtype: dictionary """ try: if isinstance(self.service, Program): self.job = MobyleJob( service = self.service , email = self.email, session = session, workflowID = self.workflowId) elif isinstance(self.service, Workflow): self.job = WorkflowJob( workflow = self.service, email = self.email, session = session, workflowID = self.workflowId) else: raise NotImplementedError("No Job can be instanciated for a %s service" % str(self.service.__class__)) for name, param in self.params.items(): if param['parameter'].isInfile(): if param['src']: param['src'] = DataProvider.get(param['src']) self.job.setValue(name, (param['userName'], None, param['src'], param['srcFileName'])) else: self.job.setValue(name, (param['userName'], param['value'], None, None)) else: if param['parameter'].getDataType().getName() == 'MultipleChoice': from types import StringTypes if isinstance( param['value'] , StringTypes ): param['value'] = [ param['value'] ] self.job.setValue(name, param['value']) # run Job self.job.run() return { 'id': str(self.job.getJobid()), 'date':str(time.strftime( "%x %X", self.job.getDate())), 'status': str( self.job.getStatus() ), } except UserValueError, e: if hasattr(e, 'message') and e.message: msg = {'errormsg':str(e.message)} else: msg = {'errormsg':str(e)} if hasattr(self, 'job') and self.job: jobId = self.job.getJobid() msg['id'] = str(jobId) if hasattr(e, 'param') and e.param: msg["errorparam"] = e.param.getName() if jobId: pid_str = str(registry.getJobPID(jobId)) else: pid_str = "none" j_log.error("user error in job %s (email %s): %s"% (pid_str, getattr(self,"email","anonymous"),str(e))) return msg except MobyleError, e: j_log.error(e, exc_info = True) if hasattr(e, 'message') and e.message: msg = {'errormsg':str(e.message)} else: msg = {'errormsg':str(e)} if hasattr(self, 'job') and self.job: jobId = self.job.getJobid() msg['id'] = str(jobId) if hasattr(e, 'param') and e.param: msg["errorparam"] = e.param.getName() return msg