Esempio n. 1
0
def reduction_submit(request, reduction_id, instrument_name):
    """
        Submit a reduction script to Fermi.

        @param request: request object
        @param reduction_id: pk of the ReductionProcess object
    """
    
    logger.debug("Reduction: %s instrument_name=%s"%(inspect.stack()[0][3],instrument_name))
    
    instrument_name_lowercase = str.lower(str(instrument_name))
    instrument_forms = view_util.import_module_from_app(instrument_name_lowercase,'forms')
    
    # TODO: Make sure the submission errors are clearly reported
    reduction_proc = get_object_or_404(ReductionProcess, pk=reduction_id, owner=request.user)

    # Start a new transaction
    transaction = remote.view_util.transaction(request, start=True)
    if transaction is None:
        
        breadcrumbs = Breadcrumbs()
        breadcrumbs.append_reduction(instrument_name_lowercase)
        breadcrumbs.append_reduction_options(instrument_name_lowercase, reduction_id)
        
        messages.add_message(request, messages.ERROR, "Could not connect to Fermi and establish transaction.")
        template_values = {'back_url': reverse('reduction_options',
                                               kwargs={'reduction_id' : reduction_id, 'instrument_name': instrument_name_lowercase}),
                           'breadcrumbs': breadcrumbs, }
        template_values = reduction_server.view_util.fill_template_values(request, **template_values)
        logger.debug(pprint.pformat(template_values))
        return render_to_response('remote/failed_connection.html', template_values,
                                  context_instance=RequestContext(request))

    data = instrument_forms.ReductionOptions.data_from_db(request.user, reduction_id)
    code = instrument_forms.ReductionOptions.as_mantid_script(data, transaction.directory)
    jobID = remote.view_util.submit_job(request, transaction, code)
    if jobID is not None:
        job = RemoteJob(reduction=reduction_proc,
                        remote_id=jobID,
                        properties=reduction_proc.properties,
                        transaction=transaction)
        job.save()
        logger.debug("Created a RemoteJob: %s",job)
    
    messages.add_message(request, messages.SUCCESS, 
                         message="Job %s sucessfully submitted. <a href='%s' class='message-link'>Click to see the results this job </a>."%
                                     (job.id, reverse('reduction_query', kwargs={'remote_job_id' : job.id, 'instrument_name' : instrument_name_lowercase})))
    
    return redirect(reverse('reduction_options',
                                  kwargs={'reduction_id' : reduction_id, 
                                          'instrument_name': instrument_name_lowercase}))
Esempio n. 2
0
def reduction_query(request, remote_job_id, instrument_name):
    """
        Show status of a given remote job.
        
        @param request: request object
        @param remote_job_id: pk of the RemoteJob object
        
    """
    instrument_name_lowercase = str.lower(str(instrument_name))
    instrument_name_capitals = str.capitalize(str(instrument_name))
    
    logger.debug("Views: %s job_id=%s"%(inspect.stack()[0][3],remote_job_id))
    
    remote_job = get_object_or_404(RemoteJob, pk=remote_job_id)

    breadcrumbs = Breadcrumbs()
    breadcrumbs.append('%s reduction'%instrument_name_lowercase,reverse('reduction_home',
                                                  kwargs={'instrument_name': instrument_name_lowercase }))
    breadcrumbs.append_reduction_options(instrument_name_lowercase, remote_job.reduction.id )
    breadcrumbs.append('jobs',reverse('reduction_jobs',
                                      kwargs={'instrument_name': instrument_name_lowercase }))
    breadcrumbs.append("job %s" % remote_job_id)
    
    template_values = {'remote_job': remote_job,
                       'remote_job_id' : remote_job.pk,
                       'parameters': remote_job.get_data_dict(),
                       'reduction_id': remote_job.reduction.id,
                       'breadcrumbs': breadcrumbs,
                       'back_url': request.path,
                       'instrument': instrument_name_lowercase}
    template_values = remote.view_util.fill_job_values(request, remote_job.remote_id, **template_values)
    template_values = reduction_server.view_util.fill_template_values(request, **template_values)
    template_values['title'] = "%s job results"%instrument_name_capitals
    
    # Go through the files and find data to plot
    if 'job_files' in template_values and 'trans_id' in template_values:
        ints_view_util = view_util.import_module_from_app(instrument_name_lowercase,'view_util')
        template_values = ints_view_util.set_into_template_values_job_files(template_values, request, remote_job)

    logger.debug(pprint.pformat(template_values))
    return render_to_response('%s/reduction_query.html'%instrument_name,
                              template_values,
                              context_instance=RequestContext(request))