def test_rule(self): req_body = {'user_id': '111'} # 命中bool型策略 control, weight = calculate_rule(id_=self.rule_id, req_body=req_body) self.assertEquals(control, 'log') self.assertEquals(weight, 90) # 命中名单型策略 add_element_to_menu(event_code=self.event_code, menu_type='black', dimension='user_id', element='111') control, weight = calculate_rule(id_=self.rule_id, req_body=req_body) self.assertEquals(control, 'deny') self.assertEquals(weight, 100)
def test_rule(self): req_body = {'user_id': '111'} # Hit bool-type strategy control, weight = calculate_rule(id_=self.rule_id, req_body=req_body) self.assertEqual(control, 'log') self.assertEqual(weight, 90) # Hit List strategy add_element_to_menu(event_code=self.event_code, menu_type='black', dimension='user_id', element='111') control, weight = calculate_rule(id_=self.rule_id, req_body=req_body) self.assertEqual(control, 'log') self.assertEqual(weight, 90)
def query_handler(req_body): rule_id = req_body.get('rule_id') result, ec, error = None, 0, None try: assert rule_id rule_id = str(rule_id) result = calculate_rule(rule_id, req_body) except AssertionError: error = 'must contain rule_id' ec = 100 except RuleNotExistsException: error = 'rule_id does not exist or is offline' ec = 101 return Response(result=result, error=error, ec=ec)
def query_handler(req_body): rule_id = req_body.get('rule_id') result, ec, error = None, 0, None try: if settings.DEBUG: assert rule_id rule_id = str(rule_id) control, weight = calculate_rule(rule_id, req_body, rules=rules, ac=ac) result = {'control': control, 'weight': weight} except AssertionError: error = _('must contain rule_id') ec = 100 except RuleNotExistsException: error = _('rule_id does not exist or is offline') ec = 101 return Response(result=result, error=error, ec=ec)
def post(self, request, *args, **kwargs): form = self.form_class(data=request.POST) if form.is_valid(): uuid_ = request.POST.get('rule') name = "rule:{}".format(uuid_) conn = get_redis_client() id_ = conn.hget(name, 'id') req_body = form.cleaned_data['req_body'] if not isinstance(req_body, list): req_body = [req_body] from risk_models.rule import calculate_rule results = [] for req in req_body: result, _ = calculate_rule(id_, req) results.append(CONTROL_MAP[result]) if len(results) == 1: results = results[0] data = dict(state=True, data=results) else: data = dict(state=False, error=errors_to_dict(form.errors)) return self.render_json_response(data)