예제 #1
0
def check_status(request):
    completed = False
    success = False
    status = None
    uid = request.POST['uid']
    try:
        offload_task = OffloadedTask.objects.get(stale=False, uid=uid)
    except OffloadedTask.DoesNotExist:
        offload_task = None
    if offload_task:
        ret = {}
        celery_task = AsyncResult(task_id=offload_task.celery_task_id)
        if celery_task.status == 'SUCCESS':
            completed = True
            success = True
            status = celery_task.status
            callable = import_class(offload_task.function.retriever)
            ret['file_url'] = callable(**offload_task.extras)
        elif celery_task.status == 'STARTED':
            completed = False
            success = True
            status = celery_task.status
        else:
            completed = False
            success = False
            status = celery_task.status
        ret['completed'] = completed
        ret['success'] = success
        ret['status'] = status
        ret['uid'] = uid
        ret['finished_timestamp'] = offload_task.finished_timestamp if offload_task else None
        ret['has_task'] = bool(offload_task or False)
        return ret
    success = True
    return {
        'completed': completed,
        'success': success,
        'status': status,
        'uid': uid,
        'has_task': bool(offload_task or False),
    }
예제 #2
0
def start_offload(request):
    success = True
    error_message = False
    function_name = request.POST['function_name']
    uid = request.POST['uid']
    try:
        offloadable_function_meta = RegisteredOffloadableFunctionSet.objects.get(name=function_name)
    except RegisteredOffloadableFunctionSet.DoesNotExist:
        success = False
        error_message = '%s has not been registered.' % function_name
        return {'success': success, 'error_message': error_message}
    callable = import_class(offloadable_function_meta.function)
    extras = json.loads(request.POST['extras'])
    OffloadedTask.objects.filter(uid=uid).update(stale=True)
    task = OffloadedTask.objects.create(function=offloadable_function_meta,
            data_type=request.POST['datatype'], extras=request.POST['extras'],
            uid=uid)
    task_res = offload_wrapper.delay(callable, offload_task_id=task.pk, **extras)
    task.celery_task_id = task_res.task_id
    task.save()
    return {'success': success, 'error_message': error_message}