Пример #1
0
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)
    )
Пример #2
0
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)
    )