def lookup_user(self, user_id): """lookup_user :param user_id: user id """ lookup_user_data = {"user_id": user_id} # if Celery is enabled use it task_method = task_get_user if settings.CELERY_ENABLED: task_method = task_get_user.delay task_name = "get_user" user_res = run_task(task_method=task_method, task_name=task_name, req_data=lookup_user_data, get_result=True) return user_res
def create(self, request, validated_data): """create Start a new MLJob :param request: http request :param validated_data: post dictionary """ last_step = "" data = {} res = { "status": FAILED, "code": drf_status.HTTP_400_BAD_REQUEST, "error": "not run", "data": data } try: user_id = request.user.id log.info(("{} create user_id={} data={}").format( self.class_name, user_id, validated_data)) # if the Full Stack is running with Celery # then it is assumed the task will be published # to the worker and only the MLJob and MLJobResult # records will be returned for polling the status # of the long-running training job task_name = "ml_job" get_result = True ml_job_task = task_ml_job if settings.CELERY_ENABLED: ml_job_task = task_ml_job.delay get_result = False req_data = validated_data req_data["user_id"] = user_id create_res = create_ml_job_record(req_data=req_data) user_obj = create_res.get("user_obj", None) ml_job_obj = create_res.get("ml_job_obj", None) ml_result_obj = create_res.get("ml_result_obj", None) if not user_obj: res["error"] = ("{} - Failed to find User").format(task_name) res["status"] = ERR res["code"] = drf_status.HTTP_400_BAD_REQUEST res["error"] = create_res.get("err", "error not set") res["data"] = None log.error(res["error"]) return res if not ml_job_obj: res["error"] = ( "{} - Failed to create MLJob").format(task_name) res["status"] = ERR res["code"] = drf_status.HTTP_400_BAD_REQUEST res["error"] = create_res.get("err", "error not set") res["data"] = None log.error(res["error"]) return res if not ml_result_obj: res["error"] = ( "{} - Failed to create MLJobResult").format(task_name) res["status"] = ERR res["code"] = drf_status.HTTP_400_BAD_REQUEST res["error"] = create_res.get("err", "error not set") res["data"] = None log.error(res["error"]) return res req_data["user_data"] = { "id": user_obj.id, "email": user_obj.email, "username": user_obj.username } req_data["ml_job_data"] = ml_job_obj.get_public() req_data["ml_result_data"] = ml_result_obj.get_public() job_res = run_task(task_method=ml_job_task, task_name=task_name, req_data=req_data, get_result=get_result) log.info(("task={} res={}").format(task_name, str(job_res)[0:30])) # in sync mode the data is in the task # response object, so send it back # because the client is blocking on it if job_res["status"] == SUCCESS: res = { "status": SUCCESS, "code": drf_status.HTTP_201_CREATED, "error": "", "data": { "job": job_res["data"]["job"], "results": job_res["data"]["results"] } } # if celery (full stack async mode) # is working on this task, # return the initial record data we have. # from there the client will have to poll # to get the final results elif not get_result and job_res["status"] == NOTDONE: res = { "status": SUCCESS, "code": drf_status.HTTP_201_CREATED, "error": "", "data": { "job": req_data["ml_job_data"], "results": req_data["ml_result_data"] } } else: res = { "status": ERR, "code": drf_status.HTTP_500_INTERNAL_SERVER_ERROR, "error": job_res["err"], "data": { "job": None, "results": None } } # end of processing result except Exception as e: last_step = ("{} Failed with ex={}").format(self.class_name, e) log.error(last_step) res = { "status": ERR, "code": drf_status.HTTP_400_BAD_REQUEST, "error": last_step, "data": last_step } # end of try/ex log.info(("{} create res={}").format(self.class_name, str(res)[0:30])) return res