def update_solution(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) check_json(request) solution_id = get_json(request).get('id') url = get_json(request).get('url') is_default = bool_helper(get_json(request).get('is_default')) is_owner = DccaAssSolutionImage.is_solution_owner(solution_id) if not is_owner: return jsonify({ 'status': 'fail', 'message': 'Solution not exist or you are not permit to access' }) image = url.split('/')[-1] if not image: return jsonify({'status': 'fail', 'message': 'Bad URL format'}) solution = DccaAssSolutionImage.query_by_id(solution_id) solution.image = image solution.link = url if is_default: if not DccaModel.check_model_owner(solution.model_id): return jsonify({ 'status': "fail", 'message': "Not the model owner, can't set default solution" }) if solution.is_public != DccaModel.check_model_permission( solution.model_id): return jsonify({ 'status': "fail", 'message': "Solution and model have different permission, can't set default solution" }) solution.model.default_solution_id = solution_id else: solution.model.default_solution_id = None try: session.commit() except Exception as e: err_msg = "Fail to update solution. {}".format(str(e)) raise DCCAException(err_msg) return jsonify({ 'id': solution_id, 'status': 'success', 'message': 'Update the solution successfully' })
def create_audit_request(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) check_json(request) solution_id = get_json(request).get('solution_id') comments = get_json(request).get('description') permission = get_json(request).get('permission') if not DccaAssSolutionImage.is_solution_owner(solution_id): return jsonify({ 'status': "fail", 'message': "Solution not exist or you are not permit to access." }) solution = DccaAssSolutionImage.get(solution_id) if not DccaModel.check_model_permission( solution.model_id) and not solution.is_public: return jsonify({ 'status': "fail", 'message': "Model is private, Fail ro create request." }) if DccaModel.check_model_permission( solution.model_id) and solution.is_public: if DccaModel.is_bind_solution(solution_id): return jsonify({ 'status': "fail", 'message': "Solution is default solution of public model, Fail to create request." }) to_public = check_permission(permission) req = DccaSolutionAudit(uid, comments, solution_id, to_public) try: session.add(req) session.commit() except Exception as e: err_msg = "Fail to create request. {}".format(str(e)) raise DCCAException(err_msg) return jsonify({ "status": "success", "message": "Request has been created, please wait for approval", "id": req.id })
def query_one_solution(solution_id): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) solution = as_dict(DccaAssSolutionImage.get(solution_id), SolutionSchema) if solution['owner_id'] == int(uid): solution['is_owner'] = True else: solution['is_owner'] = False del solution['owner_id'] if solution['model']['owner_id'] == int(uid): solution['model']['is_owner'] = True else: solution['model']['is_owner'] = False del solution['model']['owner_id'] if solution['id'] == solution['model']['default_solution_id']: solution['is_default'] = True else: solution['is_default'] = False del solution['model']['default_solution_id'] return jsonify(solution)
def delete_solution(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) check_json(request) solution_id = get_json(request).get('id') if not DccaAssSolutionImage.is_solution_owner(solution_id): return jsonify({ 'status': "fail", 'message': "Solution not exist or you are not permit to access." }) if DccaAssSolutionImage.check_solution_permission(solution_id): return jsonify({ 'status': "fail", 'message': "Can't delete public solution, change it to private solution then delete it" }) if DccaModel.is_bind_solution(solution_id): return jsonify({ 'status': "fail", 'message': "Fail to delete model's default solution. Edit solution to remove the default setting." }) solution = DccaAssSolutionImage.query_by_id(solution_id) try: solution.remove(BUCKET) session.commit() except Exception as e: err_msg = "Fail to delete solution. {}".format(str(e)) raise DCCAException(err_msg) return jsonify({ 'status': 'success', 'message': 'Delete solution successfully' })
def query_image_version(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) versions = DccaAssSolutionImage.query_solution_image_versions() return jsonify(versions)
def query_solution_name(): """ Get all the owner's solutions """ uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) solution_names = DccaAssSolutionImage.query_solution_names() return jsonify(solution_names)
def query_solutions(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) limit = request.args.get('limit') or 20 offset = request.args.get('offset') or 0 solution_name = request.args.get('solution') model_id = request.args.get('model_id') image = request.args.get('image') version = request.args.get('version') my_solution = bool_helper(request.args.get('my_solution')) results = OrderedDict() results['offset'] = offset results['limit'] = limit results['results'] = [] total, solutions = DccaAssSolutionImage.query_solutions( solution_name, model_id, image, version, my_solution, limit, offset) results['total'] = total if solutions: solutions = as_dict(solutions, SolutionSchema, many=True) for solution in solutions: if solution['owner_id'] == int(uid): solution['is_owner'] = True else: solution['is_owner'] = False del solution['owner_id'] if solution['model']['owner_id'] == int(uid): solution['model']['is_owner'] = True else: solution['model']['is_owner'] = False del solution['model']['owner_id'] if solution['model']['default_solution_id'] == solution['id']: solution['is_default'] = True else: solution['is_default'] = False del solution['model']['default_solution_id'] results['results'].append(solution) return jsonify(results)
def check_solution_name(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) check_json(request) solution_name = get_json(request).get('solution') model_id = get_json(request).get('model_id') ctx.current_user = DccaUser.get_by_id(uid) is_exist = DccaAssSolutionImage.check_solution_name( solution_name, model_id) if not is_exist: return jsonify({ 'status': 'success', 'message': 'solution name not exist' }) else: return jsonify({ 'status': 'fail', 'message': 'solution name already exists' })
def create_solution_view(): uid, err = get_oemid(request=request) if err is not None: return jsonify(UNAUTH_RESULT) ctx.current_user = DccaUser.get_by_id(uid) check_json(request) solution_name = get_json(request).get('solution') model_id = get_json(request).get('model_id') version = get_json(request).get('version') image = get_json(request).get('image') url = get_json(request).get('url') is_signed = bool_helper(get_json(request).get('is_signed')) is_default = bool_helper(get_json(request).get('is_default')) have_installer = bool_helper(get_json(request).get('have_installer')) exceed_flag, max_limit_size = DccaAssSolutionImage.check_solution_limit() if exceed_flag: return jsonify({ 'status': 'fail', 'message': 'Up to max limit({}) you can create.'.format(max_limit_size) }) if url: in_s3 = False image = url.split('/')[-1] if not image: return jsonify({'status': 'fail', 'message': 'Bad URL format'}) else: in_s3 = True s3_url = STORAGE_PREFIX + BUCKET url = '/'.join([ s3_url, ctx.current_user.username, solution_name, str(model_id), image.split('.')[0], version, image ]) if is_default: if not DccaModel.check_model_owner(model_id): return jsonify({ 'status': 'fail', 'message': 'Not the model owner, cannot set default' }) if DccaModel.check_model_permission(model_id): return jsonify({ 'status': "fail", 'message': "Can't set private solution as default solution of public model" }) solution = DccaAssSolutionImage(solution_name, model_id, image, version, url, uid, in_s3, is_signed, have_installer) try: session.add(solution) session.commit() except Exception as e: err_msg = "Fail to create solution. {}".format(str(e)) raise DCCAException(err_msg) solution_id = solution.id if is_default: solution.model.default_solution_id = solution_id try: session.commit() except Exception as e: err_msg = "Fail to set default solution. {}".format(str(e)) raise DCCAException(err_msg) return jsonify({ 'id': solution_id, 'status': 'success', 'message': 'Success to create solution' })