def app_train()

in tools/agile-machine-learning-api/main.py [0:0]


def app_train():
    """
    Training API call

    Returns:
        Json Response of Training API call

    Raise:
        Validation error : If data types of input parameters is incorrect
        Access Denied to project : When the given service account key cannot interact with GCP.
    """
    return_message = json.dumps({
        "Success": False,
        "Message": "",
        "Data": {}
    })
    response_code = 400
    try:
        call_id = uuid.uuid4()
        cfg = read_yaml()
        jobid = 'C' + str(call_id).replace('-', '_')
        payload = request.get_json()
        if isinstance(payload['train_csv_path'], list):
            train_csv_path = ' '.join([os.path.join(cfg['bucket_name'], str(
                path)) for path in payload['train_csv_path']])
        else:
            train_csv_path = os.path.join(
                cfg['bucket_name'], payload['train_csv_path'])

        eval_csv_path = os.path.join(
            cfg['bucket_name'], payload['eval_csv_path'])
        export_dir = os.path.join(
            cfg['bucket_name'],
            payload['export_dir'],
            jobid)
        APP.logger.info('[{}] Config file loaded'.format(jobid))
        response = train.post(
            cfg=cfg,
            train_csv_path=train_csv_path,
            eval_csv_path=eval_csv_path,
            task_type=payload['task_type'],
            target_var=payload['target_var'],
            data_type=(
                'None' if payload.get('data_type') is None else str(
                    payload['data_type'])),
            column_name=(
                'None' if payload.get('column_name') is None else str(
                    payload['column_name'])),
            na_values=('None' if payload.get('na_values') is None else str(
                payload['na_values'])),
            condition=('None' if payload.get('condition') is None else str(
                payload['condition'])),
            n_classes=(
                '2' if payload.get('n_classes') is None else str(
                    payload['n_classes'])),
            to_drop=('None' if payload.get('to_drop') is None else str(
                payload['to_drop'])),
            name=payload['name'],
            hidden_units=(
                '64' if payload.get('hidden_units') is None else str(
                    payload['hidden_units'])),
            num_layers=(
                '2' if payload.get('num_layers') is None else str(
                    payload['num_layers'])),
            lin_opt=(
                'ftrl' if payload.get('lin_opt') is None else payload['lin_opt']),
            deep_opt=(
                'adam' if payload.get('deep_opt') is None else payload['deep_opt']),
            train_steps=(
                '50000' if payload.get('train_steps') is None else str(
                    payload['train_steps'])),
            export_dir=export_dir,
            jobid=jobid)

        APP.logger.info('[{}] '.format(jobid) + str(payload))
        APP.logger.info('[{}] Training Job submitted to CMLE'.format(jobid))
        return_message = json.dumps({
            "Success": True,
            "Message":
                "{}/{}?project={}".format(get_job_link(),
                                          jobid, cfg['project_id']),
            "Data": {
                'jobid': jobid,
                'response': response
            }
        })
        response_code = 200

    except IOError as err:
        APP.logger.error(str(err))
        return_message = json.dumps({
            "Success": False,
            "Message": "Please check the config.yaml file",
            "Data": {"error_message": str(err)}
        })
        response_code = 500

    except AssertionError as err:
        APP.logger.error(str(err))
        return_message = json.dumps(
            {"Success": False, "Message": str(err), "Data": []})
        response_code = 500

    except Exception as err:
        APP.logger.error(str(err))
        return_message = json.dumps({
            "Success": False,
            "Message": str(err),
            "Data": err
        })
        response_code = 500

    finally:
        return Response(
            return_message,
            status=response_code,
            mimetype='application/json')