def test_check_match(): @rules.match_event(lambda kwargs: kwargs["x"] == 1) @rules.match_event(lambda kwargs: kwargs["y"] == 2, lambda kwargs: kwargs["z"] == 3) def method(): pass assert rules.check_match(method, {"x": 1, "y": 2, "z": 3}) assert rules.check_match(method, {"x": 1, "y": 2, "z": 3, "a": 5}) assert not rules.check_match(method, {"x": 1, "y": 0, "z": 3})
def test_check_match_exception(): def matcher(kwargs): if len(kwargs) == 0: raise RuntimeError return True @rules.match_event(matcher) def method(): pass assert not rules.check_match(method, {}) assert rules.check_match(method, {"x": 1})
def check(config, events_desc): cluster_config = Settings.merge(config, _get_cluster_config(config.get('powny_api_url'))) apps.init('powny', 'local', args=None, raw_config=cluster_config) context.get_context = FakeContext exposed, errors = tools.make_loader(config.get('rules-path')).get_exposed(config['rules-path']) for module in errors: logger.error("Can't load %s module by reason %s", module, errors[module]) for event in _build_events(events_desc): for (name, handler) in exposed.get("handlers", {}).items(): if rules.check_match(handler, event): try: handler(**event) except Exception as error: logger.exception("Can't execute %s rule by reason %s", name, error)