# Buggy code
def add_policy(bundle):
    request_inputs = anchore_engine.apis.do_request_prep(request, default_params={})
    bodycontent = request_inputs["bodycontent"]
    params = request_inputs["params"]

    return_object = []
    httpcode = 500
    userId = request_inputs["userId"]

    try:
        logger.debug("Adding policy")
        client = internal_client_for(CatalogClient, request_inputs["userId"])
        jsondata = json.loads(bodycontent)

        # schema check
        try:
            localconfig = anchore_engine.configuration.localconfig.get_config()
            user_auth = localconfig["system_user_auth"]
            verify = localconfig.get("internal_ssl_verify", True)

            p_client = internal_client_for(PolicyEngineClient, userId=userId)
            response = p_client.validate_bundle(jsondata)
            if not response.get("valid", False):
                httpcode = 400
                return_object = anchore_engine.common.helpers.make_response_error(
                    "Bundle failed validation",
                    in_httpcode=400,
                    detail={
                        "validation_details": [
                            x.to_dict() for x in response.validation_details
                        ]
                    },
                )
                return (return_object, httpcode)

        except Exception as err:
            raise Exception(
                "Error response from policy service during bundle validation. Validation could not be performed: {}".format(
                    err
                )
            )

        if "id" in jsondata and jsondata["id"]:
            policyId = jsondata["id"]
        else:
            policyId = hashlib.md5(
                str(userId + ":" + jsondata["name"]).encode("utf8")
            ).hexdigest()
            jsondata["id"] = policyId

        try:
            policybundle = jsondata
            policy_record = client.add_policy(policybundle)
        except Exception as err:
            raise Exception(
                "cannot store policy data to catalog - exception: " + str(err)
            )

        if policy_record:
            return_object = make_response_policy(policy_record, params)
            httpcode = 200
        else:
            raise Exception("failed to add policy to catalog DB")
    except Exception as err:
        logger.debug("operation exception: " + str(err))
        return_object = anchore_engine.common.helpers.make_response_error(
            err, in_httpcode=httpcode
        )
        httpcode = return_object["httpcode"]

    return (return_object, httpcode)


# Traceback (ValueError)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] Traceback (most recent call last):
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/gate.py", line 234, in execute
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     self.evaluate(image_obj, context)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/gates/image_metadata.py", line 59, in evaluate
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     rval = type(img_val)(rval)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] ValueError: invalid literal for int() with base 10: '4gb'
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] During handling of the above exception, another exception occurred:
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] Traceback (most recent call last):
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/bundles.py", line 453, in execute
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     self.configured_trigger.execute(image_obj, exec_context)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/gate.py", line 237, in execute
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     raise TriggerEvaluationError(trigger=self, message='Error executing gate {} trigger {} with params: {}. Msg: {}'.format(self.gate_cls.__gate_name__, self.__trigger_name__, self.eval_params, e.message))
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] AttributeError: 'ValueError' object has no attribute 'message'
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] During handling of the above exception, another exception occurred:
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] Traceback (most recent call last):
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/api/controllers/synchronous_operations.py", line 481, in check_user_image_inline
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     eval_result = executable_bundle.execute(img_obj, tag, ExecutionContext(db_session=db, configuration={}))
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/bundles.py", line 1260, in execute
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     bundle_exec = self._process_mapping_result(bundle_exec, image_object, tag, context)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/bundles.py", line 1207, in _process_mapping_result
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     errors, policy_decision = evaluated_policy.execute(image_obj=image_object, context=context)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/bundles.py", line 596, in execute
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     errs, matches = rule.execute(image_obj=image_obj, exec_context=exec_context)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/engine/policy/bundles.py", line 458, in execute
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     raise TriggerEvaluationError(trigger=self.configured_trigger, message='Could not evaluate trigger due to error in evaluation execution')
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] anchore_engine.services.policy_engine.engine.policy.exceptions.TriggerEvaluationError: TriggerEvaluationError: severity:error message:Trigger evaluation failed for gate metadata and trigger attribute, with parameters: ([]) due to: Could not evaluate trigger due to error in evaluation execution
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] During handling of the above exception, another exception occurred:
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-] Traceback (most recent call last):
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/apis/authorization.py", line 339, in inner_wrapper
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     return f(*args, **kwargs)
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/anchore_engine/services/policy_engine/api/controllers/synchronous_operations.py", line 484, in check_user_image_inline
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     abort(Response(response='Cannot execute given policy against the image due to errors executing the policy bundle: {}'.format(e.message), status=500))
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]   File "/usr/local/lib/python3.6/dist-packages/werkzeug/exceptions.py", line 707, in abort
engine-policy-engine_1  | [service:policy-engine] 2019-01-11 05:49:12+0000 [-]     return _aborter(status, *args, **kwargs)

# Fixed code
def add_policy(bundle):
    request_inputs = anchore_engine.apis.do_request_prep(request, default_params={})
    bodycontent = request_inputs["bodycontent"]
    params = request_inputs["params"]

    return_object = []
    httpcode = 500
    userId = request_inputs["userId"]

    try:
        logger.debug("Adding policy")
        client = internal_client_for(CatalogClient, request_inputs["userId"])
        jsondata = json.loads(bodycontent)

        # schema check
        try:
            localconfig = anchore_engine.configuration.localconfig.get_config()
            user_auth = localconfig["system_user_auth"]
            verify = localconfig.get("internal_ssl_verify", True)

            p_client = internal_client_for(PolicyEngineClient, userId=userId)
            response = p_client.validate_bundle(jsondata)
            if not response.get("valid", False):
                httpcode = 400
                return_object = anchore_engine.common.helpers.make_response_error(
                    "Bundle failed validation",
                    in_httpcode=400,
                    detail=response.get("validation_details"),
                )
                return (return_object, httpcode)

        except Exception as err:
            raise Exception(
                "Error response from policy service during bundle validation. Validation could not be performed: {}".format(
                    err
                )
            )

        if "id" in jsondata and jsondata["id"]:
            policyId = jsondata["id"]
        else:
            policyId = hashlib.md5(
                str(userId + ":" + jsondata["name"]).encode("utf8")
            ).hexdigest()
            jsondata["id"] = policyId

        try:
            policybundle = jsondata
            policy_record = client.add_policy(policybundle)
        except Exception as err:
            raise Exception(
                "cannot store policy data to catalog - exception: " + str(err)
            )

        if policy_record:
            return_object = make_response_policy(policy_record, params)
            httpcode = 200
        else:
            raise Exception("failed to add policy to catalog DB")
    except Exception as err:
        logger.debug("operation exception: " + str(err))
        return_object = anchore_engine.common.helpers.make_response_error(
            err, in_httpcode=httpcode
        )
        httpcode = return_object["httpcode"]

    return (return_object, httpcode)