def filter(self, filter_params=None, filter_id=None): if filter_id and filter_params: raise TypeError( "Ambiguous invocation: provide either a `filter_params` or a `filter_id` argument. " "Both were supplied.") if is_string(filter_params): if filter_params == "latest": filter_id = self.web3.manager.request_blocking( "eth_newBlockFilter", [], ) return BlockFilter(self.web3, filter_id) elif filter_params == "pending": filter_id = self.web3.manager.request_blocking( "eth_newPendingTransactionFilter", [], ) return TransactionFilter(self.web3, filter_id) else: raise ValueError( "The filter API only accepts the values of `pending` or " "`latest` for string based filters") elif isinstance(filter_params, dict): _filter_id = self.web3.manager.request_blocking( "eth_newFilter", [filter_params], ) return LogFilter(self.web3, _filter_id) elif filter_id and not filter_params: return LogFilter(self.web3, filter_id) else: raise TypeError( "Must provide either filter_params as a string or " "a valid filter object, or a filter_id as a string " "or hex.")
def caller(*args: Any, **kwargs: Any) -> Union[TReturn, LogFilter]: try: (method_str, params), response_formatters = method.process_params( module, *args, **kwargs) # noqa: E501 except _UseExistingFilter as err: return LogFilter(eth_module=module, filter_id=err.filter_id) result_formatters, error_formatters = response_formatters result = w3.manager.request_blocking(method_str, params, error_formatters) return apply_result_formatters(result_formatters, result)
def filter_wrapper( module: "Eth", method: RPCEndpoint, filter_id: HexStr, ) -> Union[BlockFilter, TransactionFilter, LogFilter]: if method == RPC.eth_newBlockFilter: return BlockFilter(filter_id, eth_module=module) elif method == RPC.eth_newPendingTransactionFilter: return TransactionFilter(filter_id, eth_module=module) elif method == RPC.eth_newFilter: return LogFilter(filter_id, eth_module=module) else: raise NotImplementedError('Filter wrapper needs to be used with either ' f'{RPC.eth_newBlockFilter}, {RPC.eth_newPendingTransactionFilter}' f' or {RPC.eth_newFilter}')