def __init__(self, options: Dict[str, Any]) -> None: self.options = options self.subscription_id = str(uuid.uuid4()) self.messages = asyncio.Queue(constants.RPC_SUBSCRIBER_MAX_QUEUE_SIZE) filters = options.get("filters", None) self.filters = filters if filters else "" self.validator = filter_parsing.get_validator(self.filters)
async def test_filters4(self): t4 = "to = 0x1111111111111111111111111111111111111111 or to = aaaa" validator = filter_parsing.get_validator(t4) f = { "value": 1.3467348e+18, "to": "0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be", "from": "0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a" } self.assertFalse(validator(f))
async def test_filters3(self): t3 = "value > 5534673480000000000 or (to = 0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be or to = 0xbd4e113ee68bcbbf768ba1d6c7a14e0033629792)" validator = filter_parsing.get_validator(t3) f = { "value": 1.3467348e+18, "to": "0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be", "from": "0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a" } self.assertTrue(validator(f))
async def test_filters2(self): t2 = "from = 0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a or value > 5534673480000000000" f = {"value": 1.3467348e+18, "to": "0xd7bec4d6bf6fc371eb51611a50540f0b59b5f896", "from": "0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a"} validator = filter_parsing.get_validator(t2) self.assertTrue(validator({"value": 6534673480000000000, "from": "a"})) self.assertFalse(validator({"value": 50, "from": "a"})) self.assertTrue(validator({"value": 50, "from": "0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a"})) self.assertTrue(validator(f))
async def test_filters1(self): t2 = "value > 5534673480000000000 or from = 0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a" validator = filter_parsing.get_validator(t2) self.assertTrue(validator({"value": 6534673480000000000, "from": "a"})) self.assertFalse(validator({"value": 50, "from": "a"})) self.assertTrue( validator({ "value": 50, "from": "0xbd4e113ee68bcbbf768ba1d6c7a14e003362979a" }))
async def test_filters6(self): t6 = "gas_price > 100" validator = filter_parsing.get_validator(t6) f = {"gas_price": 200} self.assertTrue(validator(f))
async def test_filters5(self): t5 = "gas_price < 100" validator = filter_parsing.get_validator(t5) f = {"gas_price": 200} self.assertFalse(validator(f))
def validate_filters(self, filters: str) -> Tuple[str, List[str]]: filter_parsing.get_validator(filters) keys = filter_parsing.get_keys(filters) logger.debug("Returning filters {} with keys {}", filters, keys) return filters, keys