def test_binary_operator_precedence(): jexl = JEXL() jexl.add_binary_operator('=', 50, lambda x, y: x + y) jexl.add_binary_operator('@', 100, lambda x, y: x / y) assert jexl.evaluate('(3 = 6) @ 3') == 3 assert jexl.evaluate('3 = 6 @ 3') == 5
#!/usr/bin/env python3 import json import sys import jsonschema from jsonschema.exceptions import best_match, ValidationError from pyjexl.jexl import JEXL # Create a jexl evaluator EVALUATOR = JEXL() EVALUATOR.add_binary_operator('intersect', 40, lambda x, y: set(x).intersection(y)) EVALUATOR.add_transform('date', lambda x: 0) EVALUATOR.add_transform('length', lambda x: 0) EVALUATOR.add_transform('preferenceValue', lambda x: False) EVALUATOR.add_transform('mapToProperty', lambda x, y: []) EVALUATOR.add_transform('keys', lambda x: []) EVALUATOR.add_transform('bucketSample', lambda x, y, z, q: False) EVALUATOR.add_transform('stableSample', lambda x, y: False) # cache all the known schemas to validate experiments ALL_SCHEMAS = dict() SCHEMA_MAP = { "cfr": "schema/cfr.schema.json", "onboarding": "schema/onboarding.schema.json", "onboarding-multistage": "schema/onboarding-multistage.schema.json", "cfr-fxa": "schema/cfr-fxa.schema.json", "cfr-heartbeat": "schema/cfr-heartbeat.schema.json",
def test_add_custom_binary_operator(): jexl = JEXL() jexl.add_binary_operator('=', 20, lambda x, y: (x + y) / 2) assert jexl.evaluate('2 = 4') == 3