Ejemplo n.º 1
0
def upload_attachment(**args):
    http_request = args.get('http_request')
    token = token_service.get_token(http_request)
    user_login = token.username
    has_role = token.has_role('ROLE_CONTENT')

    if not has_role:
        raise Exception('403 Forbidden')

    file_body = args.get('stream')
    file_obj = http_request.files.get('upload_attachment')[0]
    filename = file_obj.filename

    short_url = 'attachment/{}/{}'.format(
        str(uuid.uuid4()).replace('-', ''), filename)
    long_url = nexus_client.upload_artifact_data(short_url, file_body)

    if long_url is None:
        raise Exception('400 Upload to Nexus fail')

    attachment = Attachment()
    attachment.authorLogin = user_login
    attachment.name = filename
    attachment.url = long_url
    attachment.fileSize = len(file_body)
    attachment.createdDate = mytime.now()
    attachment.modifiedDate = mytime.now()

    id = attachment_db.create_attachment(attachment)
    return id
Ejemplo n.º 2
0
def create_user(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_ADMIN')
    if not has_role:
        raise Exception('403 Forbidden')

    user = User()
    user.__dict__ = args.get('user')

    old = user_db.find_one_by_kv('login', user.login)
    if old is not None:
        raise Exception('400 已存在同名用户')

    old = user_db.find_one_by_kv('email', user.email)
    if old is not None:
        raise Exception('400 email已存在')

    old = user_db.find_one_by_kv('phone', user.phone)
    if old is not None:
        raise Exception('400 phone已存在')

    user.password = passwd_service.encode(user.password)
    user.activated = True
    user.imageUrl = ''
    user.langKey = 'en'
    user.createdBy = user_login
    user.createdDate = mytime.now()
    user.lastModifiedBy = user.createdBy
    user.lastModifiedDate = mytime.now()

    id = user_db.create_user(user)
    return id
Ejemplo n.º 3
0
def create_article(**args):
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_CONTENT')
    if not has_role:
        raise Exception('403 Forbidden')

    article = Article()
    article.__dict__ = args.get('article')
    article.complete_attrs()
    article.createdDate = mytime.now()
    article.modifiedDate = mytime.now()

    id = article_db.create_article(article)
    return id
Ejemplo n.º 4
0
def update_user(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_ADMIN')
    if not has_role:
        raise Exception('403 Forbidden')

    user = User()
    user.__dict__ = args.get('user')

    old = user_db.find_one_by_kv('email', user.email)
    if old is not None and old.id != user.id:
        raise Exception('400 email已存在')

    old = user_db.find_one_by_kv('phone', user.phone)
    if old is not None and old.id != user.id:
        raise Exception('400 phone已存在')

    user.lastModifiedBy = user_login
    user.lastModifiedDate = mytime.now()
    user_db.update_user(user)

    if hasattr(user, 'password') and user.password:
        user_db.change_password(user.login,
                                passwd_service.encode(user.password))

    return 0
Ejemplo n.º 5
0
def update_solution_baseinfo(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin and not has_role:
        raise Exception('403 Forbidden')

    solution.name = args.get('name') if args.get('name') else ''
    solution.company = args.get('company') if args.get('company') else ''
    solution.version = args.get('version') if args.get('version') else ''
    solution.summary = args.get('summary') if args.get('summary') else ''
    solution.tag1 = args.get('tag1') if args.get('tag1') else ''
    solution.tag2 = args.get('tag2') if args.get('tag2') else ''
    solution.tag3 = args.get('tag3') if args.get('tag3') else ''
    solution.modelType = args.get('modelType') if args.get('modelType') else ''
    solution.toolkitType = args.get('toolkitType') if args.get(
        'toolkitType') else ''
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_baseinfo(solution)
    return 0
Ejemplo n.º 6
0
def onboarding_thread(task, base_path):
    save_task_progress(task, '正在执行', 5, '启动模型导入...')

    res = uaa_client.find_user(task.userLogin, jwt=g.oauth_client.get_jwt())
    if res['status'] != 'ok':
        save_task_progress(task, '失败', 100, '获取用户信息失败。', mytime.now())
        save_task_step_progress(task.uuid, '提取模型文件', '失败', 100, '获取用户信息失败。')
        return

    user = res['value']
    solution = Solution()
    solution.uuid = task.targetUuid
    solution.authorLogin = task.userLogin
    solution.authorName = user.get('fullName')

    if do_onboarding(task, solution, base_path):
        message_service.send_message(
            solution.authorLogin, '模型 ' + solution.name + ' 导入完成',
            '你的模型 ' + solution.name + ' 已导入系统!\n\n请点击下方[目标页面]按钮进入模型页面...',
            '/pmodelhub/#/solution/' + solution.uuid, False)
    else:
        revertback_onboarding(task.uuid, base_path)
        message_service.send_message(
            solution.authorLogin, '模型 ' + task.taskName + ' 导入失败',
            '你的模型 ' + task.taskName + ' 导入失败!\n\n请点击下方[目标页面]按钮查看任务执行情况...',
            '/pmodelhub/#/task-onboarding/' + task.uuid + '/' + task.taskName,
            False)
Ejemplo n.º 7
0
def create_task(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')

    task = Task()
    task.__dict__ = args.get('task')
    task.description = ''
    task.startDate = mytime.now()
    task.endDate = mytime.now()

    user_login = token.username
    if user_login != task.userLogin:
        raise Exception('403 Forbidden')

    id = task_db.create_task(task)
    return id
Ejemplo n.º 8
0
def create_application(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_APPLICATION')
    if not has_role:
        raise Exception('403 Forbidden')

    application = Application()
    application.__dict__ = args.get('application')
    application.complete_attrs()
    application.createdBy = user_login
    application.modifiedBy = user_login
    application.createdDate = mytime.now()
    application.modifiedDate = mytime.now()

    id = application_db.create_application(application)
    return id
Ejemplo n.º 9
0
def send_message(message, http_request):
    token = token_service.get_token(http_request)
    user_login = token.username
    if user_login is None:
        raise Exception('403 Forbidden')

    msg_dict = message
    message = Message()
    message.__dict__ = msg_dict

    message.sender = user_login
    message.viewed = False
    message.deleted = False
    message.createdDate = mytime.now()
    message.modifiedDate = mytime.now()
    id = message_db.create_message(message)

    return id
Ejemplo n.º 10
0
def create_deployment(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')

    deployment = Deployment()
    deployment.__dict__ = args.get('deployment')

    user_login = token.username
    if user_login != deployment.deployer and user_login != 'internal':
        raise Exception('403 Forbidden')

    deployment.starCount = 0
    deployment.callCount = 0
    deployment.displayOrder = 0
    deployment.createdDate = mytime.now()
    deployment.modifiedDate = mytime.now()

    id = deployment_db.create_deployment(deployment)
    return id
Ejemplo n.º 11
0
def save_task_step_progress(taskUuid, stepName, stepStatus, stepProgress,
                            description):
    task_step = TaskStep()
    task_step.taskUuid = taskUuid
    task_step.stepName = stepName
    task_step.stepStatus = stepStatus
    task_step.stepProgress = stepProgress
    task_step.description = description
    task_step.stepDate = mytime.now()

    umm_client.create_task_step(task_step, jwt=g.oauth_client.get_jwt())
Ejemplo n.º 12
0
def do_update_credit(credit, credit_plus, comment):
    credit.credit += int(credit_plus)
    credit_db.update_credit(credit)

    credit_history = CreditHistory()
    credit_history.userLogin = credit.userLogin
    credit_history.creditPlus = credit_plus
    credit_history.currentCredit = credit.credit
    credit_history.comment = comment
    credit_history.modifyDate = mytime.now()
    credit_history_db.create_credit_history(credit_history)
Ejemplo n.º 13
0
def create_document(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')

    document = Document()
    document.__dict__ = args.get('document')
    solutions = solution_db.get_solutions_by_uuid(document.solutionUuid)
    if not solutions:
        solutions = composite_solution_db.get_solutions_by_uuid(document.solutionUuid)
    solution = solutions[0]

    user_login = token.username
    if user_login != solution.get('authorLogin'):
        raise Exception('403 Forbidden')

    document.authorLogin = user_login
    document.createdDate = mytime.now()
    document.modifiedDate = mytime.now()
    id = document_db.create_document(document)
    return id
Ejemplo n.º 14
0
def send_multicast_message(draft, http_request):
    token = token_service.get_token(http_request)
    user_login = token.username
    if user_login is None:
        raise Exception('403 Forbidden')

    message = Message()
    message.__dict__ = draft.get('message')
    receivers = draft.get('receivers')

    message.sender = user_login
    message.viewed = False
    message.deleted = False
    message.createdDate = mytime.now()
    message.modifiedDate = mytime.now()

    for receiver in receivers:
        message.receiver = receiver
        message_db.create_message(message)

    return 0
Ejemplo n.º 15
0
def create_star(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')
    user_login = token.username

    star = Star()
    star.__dict__ = args.get('star')
    star.userLogin = user_login
    star.starDate = mytime.now()

    id = star_db.create_star(star)
    return id
Ejemplo n.º 16
0
def do_deploy(task, namespace, is_public):
    save_task_step_progress(task.uuid, '模型部署', '执行', 10, '开始创建namespace...')
    try:
        g.k8s_client.core_api.read_namespace(namespace)
    except:
        body = {
            'apiVersion': 'v1',
            'kind': 'Namespace',
            'metadata': {
                'name': namespace
            }
        }
        try:
            g.k8s_client.core_api.create_namespace(body=body)
        except:
            save_task_step_progress(task.uuid, '模型部署', '失败', 100,
                                    '创建namespace失败')
    save_task_step_progress(task.uuid, '模型部署', '执行', 15, '创建namespace完成。')
    save_task_progress(task, '正在执行', 15, '创建namespace成功。')

    if not create_deployment(task, namespace):
        save_task_progress(task, '失败', 100, '创建Kubernetes部署对象失败...',
                           mytime.now())
        return False
    save_task_progress(task, '正在执行', 80, '创建Kubernetes部署对象成功。')

    if not create_service(task, namespace):
        save_task_progress(task, '失败', 100, '创建Kubernetes服务对象失败...',
                           mytime.now())
        return False
    save_task_progress(task, '正在执行', 90, '创建Kubernetes服务对象成功。')

    if not save_deployment(task, namespace, is_public):
        save_task_progress(task, '失败', 100, '保存模型部署对象失败...', mytime.now())
        return False
    save_task_progress(task, '成功', 100, '成功完成模型部署。')

    return True
Ejemplo n.º 17
0
def create_solution(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')
    user_login = token.username

    solution = Solution()
    solution.__dict__ = args.get('solution')
    if user_login != solution.authorLogin and user_login != 'internal':
        raise Exception('403 Forbidden')

    solution.active = True
    solution.company = ''
    solution.starCount = 0
    solution.viewCount = 0
    solution.downloadCount = 0
    solution.commentCount = 0
    solution.displayOrder = 0
    solution.createdDate = mytime.now()
    solution.modifiedDate = mytime.now()

    solution_id = solution_db.create_solution(solution)

    # 为solution创建描述,其uuid设为与solution的uuid一致。 ----huolongshe
    # description表只能在这里创建
    description = Description()
    description.solutionUuid = solution.uuid
    description.authorLogin = solution.authorLogin
    description.content = r'<p>无内容</p>'
    description_db.create_description(description)

    credit = Credit()
    credit.__dict__ = credit_service.find_user_credit(solution.authorLogin)
    credit_service.do_update_credit(credit, 3,
                                    '创建新模型<{}>'.format(solution.name))

    return solution_id
Ejemplo n.º 18
0
def update_solution_name(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin:
        raise Exception('403 Forbidden')

    solution.name = args.get('name')
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_name(solution)
    return 0
Ejemplo n.º 19
0
def register_user(**args):
    user = User()
    user.__dict__ = args.get('user')

    old = user_db.find_one_by_kv('login', user.login)
    if old is not None:
        raise Exception('400 username重名')

    old = user_db.find_one_by_kv('email', user.email)
    if old is not None:
        raise Exception('400 email重名')

    old = user_db.find_one_by_kv('phone', user.phone)
    if old is not None:
        raise Exception('400 phone重名')

    user.password = passwd_service.encode(user.password)
    user.activated = False
    user.activationKey = passwd_service.gen_random_key()
    user.imageUrl = ''
    user.langKey = 'en'
    user.createdBy = user.login
    user.createdDate = mytime.now()
    user.lastModifiedBy = user.login
    user.lastModifiedDate = mytime.now()
    user.authorities = [
        'ROLE_USER',
    ]  # 缺省所有用户都有ROLE_USER角色

    user_db.create_user(user)
    if not mail_service.send_activation_email(
            user.email, user.activateUrlPrefix, user.activationKey):
        user_db.delete_user_by_login(user.login)
        raise Exception('400 发送注册邮件失败')

    return 0
Ejemplo n.º 20
0
def create_artifact(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')

    artifact = Artifact()
    artifact.__dict__ = args.get('artifact')

    user_login = token.username
    if user_login != 'internal':
        solutions = solution_db.get_solutions_by_uuid(artifact.solutionUuid)
        if len(solutions) > 0:
            # solution已经存在, 只允许solution作者自己添加artifact
            solution = solutions[0]
            if user_login != solution.get('authorLogin'):
                raise Exception('403 Forbidden')
        else:
            # solution不存在, 只允许internal添加artifact
            raise Exception('403 Forbidden')

    artifact.createdDate = mytime.now()
    artifact.modifiedDate = mytime.now()
    id = artifact_db.create_artifact(artifact)
    return id
Ejemplo n.º 21
0
def update_solution_picture_url(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin and not has_role:
        raise Exception('403 Forbidden')

    solution.pictureUrl = args.get('pictureUrl')
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_picture_url(solution)
    return 0
Ejemplo n.º 22
0
def create_task_step(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')

    user_login = token.username
    # 只能由umu微服务中的异步任务OnBoardingServie调用,不能由前端用户调用
    if user_login != 'internal':
        raise Exception('403 Forbidden')

    task_step = TaskStep()
    task_step.__dict__ = args.get('task_step')
    task_step.stepDate = mytime.now()

    id = task_step_db.create_task_step(task_step)
    return id
Ejemplo n.º 23
0
def update_task(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')

    user_login = token.username
    # updateTask只能由umu微服务中的异步任务OnBoardingServie调用,不能由前端用户调用
    if user_login != 'internal':
        raise Exception('403 Forbidden')

    task = Task()
    task.__dict__ = args.get('task')
    task.endDate = mytime.now()

    task_db.update_task(task)
    return 0
Ejemplo n.º 24
0
def password_reset_init(**args):
    if verify_code_service.validate_verify_code(**args) != 1:
        raise Exception('403, 验证码错误')

    user = user_db.find_one_by_kv('email', args.get('email'))
    if user is None or not user.activated:
        raise Exception('400, 用户不存在或未激活')

    user.resetKey = passwd_service.gen_random_key()
    user.resetDate = mytime.now()
    user_db.update_user_password_reset(user)

    if not mail_service.send_password_reset_email(
            args.get('email'), args.get('resetUrlPrefix'), user.resetKey):
        raise Exception('400, 发送邮件失败')

    return 0
Ejemplo n.º 25
0
def find_user_credit(user_login):
    credit_dict = credit_db.get_user_credit(user_login)

    if credit_dict is None:
        credit = Credit()
        credit.userLogin = user_login
        credit.credit = 50
        credit_db.create_credit(credit)
        credit_dict = credit.__dict__

        credit_history = CreditHistory()
        credit_history.userLogin = user_login
        credit_history.creditPlus = 50
        credit_history.currentCredit = 50
        credit_history.comment = '初始化赋值50积分'
        credit_history.modifyDate = mytime.now()
        credit_history_db.create_credit_history(credit_history)

    return credit_dict
Ejemplo n.º 26
0
def update_solution_admininfo(**args):
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if not has_role:
        raise Exception('403 Forbidden')

    solution.subject1 = args.get('subject1') if args.get('subject1') else ''
    solution.subject2 = args.get('subject2') if args.get('subject2') else ''
    solution.subject3 = args.get('subject3') if args.get('subject3') else ''
    solution.displayOrder = args.get('displayOrder') if args.get(
        'displayOrder') else 0
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_admininfo(solution)
    return 0
Ejemplo n.º 27
0
def update_deployment_admin_info(**args):
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_OPERATOR')
    if not has_role:
        raise Exception('403 Forbidden')

    deployment = Deployment()
    deployment.__dict__ = deployment_db.get_deployment_by_id(
        args.get('deploymentId'))

    deployment.subject1 = args.get('subject1') if args.get('subject1') else ''
    deployment.subject2 = args.get('subject2') if args.get('subject2') else ''
    deployment.subject3 = args.get('subject3') if args.get('subject3') else ''
    deployment.displayOrder = args.get('displayOrder') if args.get(
        'displayOrder') else 0
    deployment.modifiedDate = mytime.now()

    deployment_db.update_deployment_admininfo(deployment)
    return 0
Ejemplo n.º 28
0
def deploy_thread(task, is_public):
    save_task_progress(task, "正在执行", 5, "启动模型部署...")
    save_task_step_progress(task.uuid, '模型部署', '执行', 5, '启动模型部署...')

    try:
        namespace = 'ucumos-' + replace_special_char(task.userLogin)
    except:
        save_task_step_progress(task.uuid, '模型部署', '失败', 100, '获取用户信息失败。')
        save_task_progress(task, '失败', 100, '获取用户信息失败。', mytime.now())
        return

    if do_deploy(task, namespace, is_public):
        complete = '完成'
    else:
        delete_deploy(task.uuid, namespace)
        complete = '失败'

    message_service.send_message(
        task.userLogin, '模型 ' + task.taskName + ' 部署' + complete, '你的模型 ' +
        task.taskName + ' 部署' + complete + '!\n\n请点击下方[目标页面]按钮查看任务详情。',
        '/pmodelhub/#/deploy/view/' + task.uuid, False)
Ejemplo n.º 29
0
def deploy_model(**args):
    http_request = args.get('http_request')
    token = token_service.get_token(http_request)
    user_login = token.username
    if user_login is None:
        raise Exception('403 Forbidden')

    res = umm_client.get_solutions(args.get('solutionUuid'), token.jwt)
    if res['status'] != 'ok':
        raise Exception('500: 从umm获取模型对象失败')
    solution = res['value']['results'][0]

    is_public = args.get('public')
    if solution.get('active') and not is_public:
        raise Exception('403 Forbidden: 公开模型不能部署为私有')

    task = Task()
    task.uuid = str(uuid.uuid4()).replace('-', '')
    task.userLogin = user_login
    task.taskName = solution.get('name')
    task.taskType = '模型部署'
    task.taskStatus = '等待调度'
    task.taskProgress = 0
    task.targetUuid = solution.get('uuid')  # 约定部署实例的targetUuid与solution的uuid一致
    task.startDate = mytime.now()

    res = umm_client.create_task(task, jwt=token.jwt)
    if res['status'] != 'ok':
        raise Exception('500: 向umm创建模型部署任务失败')

    task.id = res['value']
    thread = threading.Thread(target=deploy_thread, args=(task, is_public))
    thread.setDaemon(True)
    thread.start()

    return task.uuid
Ejemplo n.º 30
0
def do_onboarding(task, solution, base_path):
    save_task_progress(task, '正在执行', 10, '提取模型文件...')

    if not extract_modelfile(task, base_path):
        save_task_progress(task, '失败', 100, '提取模型文件失败...', mytime.now())
        del_path(base_path)
        return False
    save_task_progress(task, '正在执行', 20, '完成文件验证并成功提取模型文件。')

    if not create_solution(task, solution, base_path):
        save_task_progress(task, '失败', 100, '创建模型对象失败...', mytime.now())
        del_path(base_path)
        return False
    save_task_progress(task, '正在执行', 40, '完成模型对象创建。')

    if not add_artifacts(task, solution, base_path):
        save_task_progress(task, '失败', 100, '添加artifact文件失败...', mytime.now())
        del_path(base_path)
        return False
    save_task_progress(task, '正在执行', 60, '完成添加artifact文件。')

    if not generate_TOSCA(task, solution, base_path):
        save_task_progress(task, '失败', 100, '生成TOSCA文件失败...', mytime.now())
        del_path(base_path)
        return False
    save_task_progress(task, '正在执行', 70, '完成TOSCA文件生成。')

    if not generate_microservice(task, solution, base_path):
        save_task_progress(task, '失败', 100, '生成微服务失败...', mytime.now())
        del_path(base_path)
        return False
    save_task_progress(task, '正在执行', 90, '完成微服务生成。')

    del_path(base_path)
    save_task_progress(task, '成功', 100, '完成模型导入。', mytime.now())

    return True