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
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
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
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
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
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)
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
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
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
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
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())
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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