'Return a pair with whether execution is successful as well as either
resulting output data or an error message indicating the problem.'

def handle_single_execution(self, trans, rerun_remap_job_id, params, history, mapping_over_collection, execution_cache=None):

    try:
        (job, out_data) = self.execute(trans, incoming=params, history=history, rerun_remap_job_id=rerun_remap_job_id, mapping_over_collection=mapping_over_collection, execution_cache=execution_cache)
    except httpexceptions.HTTPFound as e:
        raise e
    except ToolInputsNotReadyException as e:
        return (False, e)
    except Exception as e:
        log.exception('Exception    caught    while    attempting    tool    execution:')
        message = ('Error    executing    tool:    %s' % str(e))
        return (False, message)
    if isinstance(out_data, odict):
        return (job, list(out_data.items()))
    else:
        if isinstance(out_data, string_types):
            message = out_data
        else:
            message = 'Failure    executing    tool    (invalid    data    returned    from    tool    execution)'
        return (False, message)
