def middleware(method: RPCEndpoint, params: Any) -> RPCResponse: if method in NEW_FILTER_METHODS: filter_id = next(filter_id_counter) _filter: Union[RequestLogs, RequestBlocks] if method == RPC.eth_newFilter: _filter = RequestLogs( w3, **apply_key_map(FILTER_PARAMS_KEY_MAP, params[0])) elif method == RPC.eth_newBlockFilter: _filter = RequestBlocks(w3) else: raise NotImplementedError(method) filters[filter_id] = _filter return {"result": filter_id} elif method in FILTER_CHANGES_METHODS: filter_id = params[0] # Pass through to filters not created by middleware if filter_id not in filters: return make_request(method, params) _filter = filters[filter_id] if method == RPC.eth_getFilterChanges: return {"result": next(_filter.filter_changes)} elif method == RPC.eth_getFilterLogs: # type ignored b/c logic prevents RequestBlocks which doesn't implement get_logs return {"result": _filter.get_logs()} # type: ignore else: raise NotImplementedError(method) else: return make_request(method, params)
def middleware(method, params): if method in NEW_FILTER_METHODS: filter_id = next(filter_id_counter) if method == 'eth_newFilter': _filter = RequestLogs( w3, **apply_key_map(FILTER_PARAMS_KEY_MAP, params[0])) elif method == 'eth_newBlockFilter': _filter = RequestBlocks(w3) else: raise NotImplementedError(method) filters[filter_id] = _filter return {'result': filter_id} elif method in FILTER_CHANGES_METHODS: filter_id = params[0] # Pass through to filters not created by middleware if filter_id not in filters: return make_request(method, params) _filter = filters[filter_id] if method == 'eth_getFilterChanges': return {'result': next(_filter.filter_changes)} elif method == 'eth_getFilterLogs': return {'result': _filter.get_logs()} else: raise NotImplementedError(method) else: return make_request(method, params)
def middleware(method, params): if method in NEW_FILTER_METHODS: filter_id = next(filter_id_counter) if method == 'eth_newFilter': _filter = RequestLogs(w3, **apply_key_map(FILTER_PARAMS_KEY_MAP, params[0])) elif method == 'eth_newBlockFilter': _filter = RequestBlocks(w3) else: raise NotImplementedError(method) filters[filter_id] = _filter return {'result': filter_id} elif method in FILTER_CHANGES_METHODS: filter_id = params[0] # Pass through to filters not created by middleware if filter_id not in filters: return make_request(method, params) _filter = filters[filter_id] if method == 'eth_getFilterChanges': return {'result': next(_filter.filter_changes)} elif method == 'eth_getFilterLogs': return {'result': _filter.get_logs()} else: raise NotImplementedError(method) else: return make_request(method, params)
def return_filter( contract=None, args=[]): event_name = args[0] kwargs = apply_key_map({'filter': 'argument_filters'}, args[1]) if 'fromBlock' not in kwargs: kwargs['fromBlock'] = 'latest' return contract.events[event_name].createFilter(**kwargs)
def return_filter_by_api(api_style=None, contract=None, args=[]): if api_style == 'v3': with pytest.deprecated_call(): return contract.eventFilter(*args) elif api_style == 'v4': event_name = args[0] kwargs = apply_key_map({'filter': 'argument_filters'}, args[1]) if 'fromBlock' not in kwargs: kwargs['fromBlock'] = 'latest' return getattr(contract.events, event_name).createFilter(**kwargs) else: raise ValueError("api_style must be 'v3 or v4'")
def test_apply_key_map(formatter, value, expected): assert eth_utils.apply_key_map(formatter, value) == expected mapper = apply_key_map(formatter) assert mapper(value) == expected
def test_apply_key_map_with_key_conflicts_raises_exception(formatter, value): with pytest.raises(KeyError): eth_utils.apply_key_map(formatter, value)