def new_job(request,job_id=None,tool_id=None): ''' If there is a tool_id, open a NEW job with that tool preseselected Otherwise, open a NEW job with no tool selected ''' # Get job details if available # Only continue on this page if the job is "configurable" (non-existent or unconfigured) job = use_api.getJob(job_id) if job and not job.status == 'U': return HttpResponseRedirect(reverse('view_job',args=[job_id])) if request.method == 'POST': # updated information from form form=forms.JobSubmissionForm(request.POST, owner=request.user.id) if form.is_valid(): name=form.cleaned_data["name"] tool=form.cleaned_data["tool"] file=form.cleaned_data["file"] if job_id: logger.debug("Updating job: "+str(job_id)) use_api.updateJob(request.user.id,job_id,name,tool,file) else: logger.debug("Saving job: "+str(job_id)) job_id = use_api.saveJob(request.user.id,name,tool,file) return HttpResponseRedirect(reverse('config_job',args=[job_id])) else: logger.debug("Form errors in new_job POST: "+str(form.errors)) elif job_id: # New form for existing job logger.debug("Building form for existing job: "+str(job.id)) form=forms.JobSubmissionForm( owner=request.user.id, instance=job ) else: # New form for new job form=forms.JobSubmissionForm( owner=request.user.id, initial={ 'tool' : tool_id} ) # Configure navigation if job: link = { 'remove' : reverse('delete_job',args=[job_id]), 'post' : reverse('edit_job',args=[job_id]), } else: link = { 'post' : reverse('new_job'), } link['cancel'] = { 'url' : reverse('list_jobs'), 'name' : "Job List", } return render_to_response( 'JobEntry.html', { "link" : link, "job" : job, "form" : form, }, context_instance=RequestContext(request) )
def view_job(request,job_id=None,tool_id=None): ''' Show the status (and, if available, results) of a job that has already been created. Post back to this page to return the job to "unconfigured" status ''' job = use_api.getJob(job_id) if request.method == 'POST': if not job or job.status=='U': logger.debug("Entered show_job with Unconfigured status: shouldn't happen!") if not job: return HttpResponseRedirect(reverse('list_jobs')) else: return HttpResponseRedirect(reverse('edit_job',args=[job.id])) elif "ResetJob" in request.POST: logger.debug("Status returned to 'U' (Unconfigured)") # Make a status note status=models.JobStatus(message='Job returned to Unconfigured (all results deleted)', timestamp=datetime.datetime.now(), job=job) status.save() # Save the job with its new status job.status='U' # edit_job will hand us back over to show_job job.delete_results() job.save() return HttpResponseRedirect(reverse('edit_job',args=[job.id])) # display the job status page and (if available) a result summary, result download # buttons, etc. link = { 'cancel' : { 'url': reverse('list_jobs'), 'name': "Job List", }, 'post' : reverse('view_job',args=[job.id]), } try: if job.results and job.status != 'F': link['download'] = reverse('download',args=[job.results.id]) mapdata = reverse('jsonp',args=[job.results.id]) else: if job.results and job.status == 'F': errorfile = job.results.file errorfile.open("r") mapdata = json.loads(errorfile.read()) errorfile.close() else: mapdata = None except models.DataFile.DoesNotExist: mapdata = None template = 'JobView.html' if job.status != 'F' else 'JobError.html' return render_to_response( template, { "link" : link, "job" : job, "mapdata" : mapdata, }, context_instance=RequestContext(request) )