from manager.mancelery import celery


@celery.task
def async_instance_operation(operation_id, instance_pk, activity_pk, **kwargs):
    from vm.models import Instance, InstanceActivity
    instance = Instance.objects.get(pk=instance_pk)
    operation = getattr(instance, operation_id)
    activity = InstanceActivity.objects.get(pk=activity_pk)

    # save async task UUID to activity
    activity.task_uuid = async_instance_operation.request.id
    activity.save()

    return operation._exec_op(activity=activity, **kwargs)


@celery.task
def async_node_operation(operation_id, node_pk, activity_pk, **kwargs):
    from vm.models import Node, NodeActivity
    node = Node.objects.get(pk=node_pk)
    operation = getattr(node, operation_id)
    activity = NodeActivity.objects.get(pk=activity_pk)

    # save async task UUID to activity
    activity.task_uuid = async_node_operation.request.id
    activity.save()

    return operation._exec_op(activity=activity, **kwargs)