def delete_model(token, uuid, resultcode='204'):
    """
    删除模型
    :param token:
    :param uuid:
    :return:
    """
    req = api_model_m.get_delete_model_req(token, uuid)
    send_req.send_request(req, resultcode)
def delete_model_service(token, uuid):
    '''
    删除模型服务
    :param token:
    :param uuid:
    :return:
    '''
    req = api_model_m.get_delete_model_service_req(token, uuid)
    send_req.send_request(req, '204')
def delete_project_task_by_uuid(token, task_uuid):
    """
    根据uuid删除任务
    :param token:
    :param task_uuid:
    :return:
    """
    req = api_project_m.get_delete_task_req(token=token, task_id=task_uuid)
    send_req.send_request(req, '204')
def stop_model_service(token, uuid):
    '''
    停止模型服务
    :param token:
    :param uuid:
    :return:
    '''
    req = api_model_m.get_stop_model_service_req(token, uuid)
    send_req.send_request(req, '201')
def delete_model_version(token, model_uuid, version_uuid, resultcode='204'):
    """
    删除模型版本
    :param token:
    :param model_uuid:
    :param version_uuid:
    :return:
    """
    req = api_model_m.get_delete_model_version_req(token, model_uuid, version_uuid)
    send_req.send_request(req, resultcode)
def modity_model_version(token, model_id, version_id, model_path, description='automation test model'):
    '''
    修改模型版本
    :param token:
    :param model_id:
    :param model_path:
    :param description:
    :return:
    '''
    req = api_model_m.get_modify_model_req(token, model_id, version_id, model_path, description)
    send_req.send_request(req)
def share_model_and_cancel(token, uuid, share_type, is_public, users=None, groups=None):
    '''
    共享/取消共享模型
    :param token:
    :param uuid:
    :param shareType:
    :param isPublic:
    :param users:
    :param groups:
    :return:
    '''
    req = api_model_m.get_share_model_req(token, uuid, share_type, is_public, users, groups)
    send_req.send_request(req)
def compose_user_login(l=None):
    global token
    req = get_compose_user_login_req()
    if l is not None:
        resp = l.client.request(method=req.method,
                                headers=req.headers,
                                url=req.path,
                                json=req.body)
        try:
            result = json.loads(str(resp.content, 'utf-8'))
            token = f"Bearer {result['accessToken']}"
        except Exception:
            print("can not get token!")
            print('resp is {}'.format(resp.content))
            return False
    else:
        # on_start执行时调用
        resp = send_req.send_request(req)

        try:
            token = f"Bearer {resp['accessToken']}"
        except Exception:
            print("can not get token!")
            print('resp is {}'.format(resp.content))
            return False
def get_user_detail(token, uuid):
    req = api_user_m.get_user_detail_req(token=token, uuid=uuid)
    resp = send_req.send_request(req)

    logger.log_info(f'user detail is: {resp}.')

    return resp
def edit_user(token, uuid, **kwargs):
    """
    编辑用户
    Args:
        token: 管理员用户token
        uuid: 用户uuid
        **kwargs: 包含可选参数fullname,
                  active, roles, groups, expires
    Returns:
        resp: updated user info

    """

    res = get_user_detail(token, uuid)

    fullname = kwargs['fullname'] if kwargs.get('fullname') else res['fullName']
    if kwargs.get('active') is not None:
        active = kwargs['active']
    else:
        active = res['isActive']
    roles = kwargs['roles'] if kwargs.get('roles') else res['roles']
    groups = kwargs['groups'] if kwargs.get('groups') else res['groups']

    if kwargs.get('expires'):
        expires = kwargs.get('expires')
    else:
        # 默认有效期一年
        expires = date_time.get_delta_datetime(years=1)

    req = api_user_m.edit_user_req(token, uuid, fullname,
                                   active, roles, groups, expires)
    resp = send_req.send_request(req)

    return resp
def create_model(token, model_name, labels=['autotest'], description='automation test',
                 model_type='auto',users=None, groups=None, share_type="PRIVATE", is_public=False, resultcode='201'):
    """
    创建新模型
    :param token:
    :param model_name:
    :param description:
    :param labels: list of string
    :return:
    """
    req = api_model_m.get_create_model_req(token=token, model_name=model_name, labels=labels, description=description,
                model_type=model_type,users=users, groups=groups, share_type=share_type, is_public=is_public)
    if resultcode is '201':
        res = send_req.send_request(req, resultcode)
        return res['uuid']
    else:
        send_req.send_request(req, resultcode)
        return True
def get_token_simple(username=config.user_name_a, userpwd=config.user_passwd_a,
                     return_code='200'):
    req = api_user_m.get_user_login_req(username, userpwd)
    resp = send_req.send_request(req, result_code=return_code)
    if return_code == '200':
        token = f"Bearer {resp.get('accessToken')}"
        return token
    else:
        return resp.get("message", '')
def get_skyflow_list(token,
                     name=None,
                     process_type=None,
                     start=1,
                     count=1000,
                     order='desc',
                     order_by='createdAt'):
    """
    获取skyflow列表
    Args:
        token: 用户token
        name: skyflow项目名称
        process_type: process类型, 例如public
        start: 起始编号
        count: 截至编号
        order: 排序方式, 升序或降序
        order_by: 排序依据

    Returns:
        skyflow_list: skyflow列表, 包含模板类型在内.

    """
    req = api_compose.get_compose_skyflow_list_req(token,
                                                   name=name,
                                                   process_type=process_type,
                                                   start=start,
                                                   count=count,
                                                   order=order,
                                                   order_by=order_by)

    skyflow_list = send_req.send_request(req)

    req = api_compose.get_compose_skyflow_list_req(token,
                                                   name=name,
                                                   process_type=process_type,
                                                   start=start,
                                                   count=count,
                                                   order=order,
                                                   order_by=order_by,
                                                   is_template=True)

    skyflow_list += send_req.send_request(req)

    return skyflow_list
def cancel_shared_file(token, share_uuid):
    '''
    取消分享文件
    :param token:
    :param share_uuid: 文件分享关系的UUID
    :return:
    '''
    req = api_file_m.get_cancel_shared_file_req(token=token, share_uuid=share_uuid)
    res = send_req.send_request(req, '204')
    return res
def delete_resource_template(token, uuid):
    """

    :param token:
    :param uuid:
    :return:
    """
    req = api_resource_m.get_delete_resource_template_req(token, uuid)
    res = send_req.send_request(req, '204')
    return res
def get_version_list_by_model(token, model_id, expected_result='200'):
    """
    获取model下的version列表
    :param token:
    :param model_id:
    :param expected_result:
    :return:
    """
    req = api_model_m.get_version_from_model_req(token, model_id)
    res = send_req.send_request(req, expected_result)
def entry_project_by_uuid(token, uuid):
    '''
    进入项目页面
    :param token:
    :param uuid:
    :return:
    '''
    req = api_project_m.get_entry_project_req(token=token, uuid=uuid)
    res = send_req.send_request(req)
    return res
def delete_user_group(token, group_uuid, return_code='204'):
    """
    删除用户组
    :param token:
    :param group_uuid:
    :param return_code:
    :return:
    """
    req = api_user_m.get_delete_user_group_req(token, group_uuid)
    res = send_req.send_request(req, return_code)
def get_model_info(token, model_uuid, resultcode='200'):
    '''
    查看模型信息
    :param token:
    :param model_uuid:
    :return:
    '''
    req = api_model_m.get_model_info_req(token, model_uuid)
    res = send_req.send_request(req, resultcode)
    return res
def get_project_task_info_by_uuid(token, task_uuid):
    """
    根据uuid获取任务信息
    :param token:
    :param task_uuid:
    :return:
    """
    req = api_project_m.get_task_info_req(token=token, task_id=task_uuid)
    res = send_req.send_request(req, '200')
    return res
def get_user_group_detail(token, group_uuid):
    """
    获取指定用户组详细信息
    :param token:
    :param group_uuid:
    :return:
    """
    req = api_user_m.get_user_group_detail_req(token, group_uuid)
    res = send_req.send_request(req)
    return res
def stop_project_task(token, task_uuid):
    """
    停止任务
    :param token:
    :param task_uuid:
    :return:
    """
    req = api_project_m.get_stop_task_req(token=token, task_id=task_uuid)
    res = send_req.send_request(req, '202')
    return res['uuid']
def delete_project_by_uuid(token, uuid, result_code='204'):
    """
    按uuid删除项目
    :param token:
    :param uuid:
    :return:
    """
    req = api_project_m.get_delete_project_req(token=token, uuid=uuid)
    res = send_req.send_request(req, result_code)
    return res
def offline_model_version(token, model_id, version_id, expected_result='200'):
    """
    下线/停止模型版本
    :param token:
    :param model_id:
    :param version_id:
    :param expected_result:
    :return:
    """
    req = api_model_m.get_offline_version_req(token, model_id, version_id)
    res = send_req.send_request(req, expected_result)
def upload_file(token, file, target):
    '''
    上传文件
    :param token:
    :param file: 上传文件及其绝对路径
    :param target: 上传到ceph的目的地址(相对路径)
    :return:
    '''
    req = api_file_m.get_upload_file_req(token=token, file=file, target=target)
    res = send_req.send_request(req)
    return res['files']
def move_file(token, sourcePaths, targetPath):
    '''
    移动文件/文件夹
    :param token:
    :param sourcePaths:
    :param targetPath:
    :return:
    '''
    req = api_file_m.get_move_file_req(token=token, sourcePaths=sourcePaths, targetPath=targetPath)
    res = send_req.send_request(req)
    return res
def get_uuid_by_username(token, username):
    req = api_compose.get_compose_user_list_req(token=token, username=username)
    res = send_req.send_request(req)
    if res['total'] == 0:
        logger.log_debug("Can not find user {}".format(username))
    else:
        for user in res['users']:
            if user['username'] == username:
                return user['uuid']

    return ''
def get_user_ceph_path(token):
    '''
    获取用户文件存储的ceph路径
    :param token:
    :param description:
    :return:
    '''
    req = api_storage_m.get_user_volume_id_req(token=token)
    res = send_req.send_request(req)
    path = res["volumes"][0]["path"]
    return path
def get_model_version_info(token, model_uuid, version_uuid, resultcode='200'):
    """
    查看模型版本信息
    :param token:
    :param model_uuid:
    :param version_uuid:
    :return:
    """
    req = api_model_m.get_model_version_info_req(token, model_uuid, version_uuid)
    res = send_req.send_request(req, resultcode)
    return res
def copy_file(token, sourcePaths, targetPath):
    '''
    拷贝文件/文件夹
    :param token:
    :param sourcePaths:
    :param targetPath:
    :return:
    '''
    req = api_file_m.get_copy_file_req(token=token, sourcePaths=sourcePaths, targetPath=targetPath)
    res = send_req.send_request(req, '202')
    return res