def deploy(self, w3: "Web3") -> "LogFilter": if not isinstance(w3, web3.Web3): raise ValueError(f"Invalid web3 argument: got: {w3!r}") for arg in AttributeDict.values(self.args): arg._immutable = True self._immutable = True log_filter = cast("LogFilter", w3.eth.filter(self.filter_params)) log_filter.filter_params = self.filter_params log_filter.set_data_filters(self.data_argument_values) log_filter.builder = self if self.formatter is not None: log_filter.log_entry_formatter = self.formatter return log_filter
class EventFilterBuilder: formatter = None _fromBlock = None _toBlock = None _address = None _immutable = False def __init__( self, event_abi: ABIEvent, abi_codec: ABICodec, formatter: EventData=None ) -> None: self.event_abi = event_abi self.abi_codec = abi_codec self.formatter = formatter self.event_topic = initialize_event_topics(self.event_abi) self.args = AttributeDict( _build_argument_filters_from_event_abi(event_abi, abi_codec)) self._ordered_arg_names = tuple(arg['name'] for arg in event_abi['inputs']) @property def fromBlock(self) -> BlockIdentifier: return self._fromBlock @fromBlock.setter def fromBlock(self, value: BlockIdentifier) -> None: if self._fromBlock is None and not self._immutable: self._fromBlock = value else: raise ValueError( "fromBlock is already set to {0}. " "Resetting filter parameters is not permitted".format(self._fromBlock)) @property def toBlock(self) -> BlockIdentifier: return self._toBlock @toBlock.setter def toBlock(self, value: BlockIdentifier) -> None: if self._toBlock is None and not self._immutable: self._toBlock = value else: raise ValueError( "toBlock is already set to {0}. " "Resetting filter parameters is not permitted".format(self._toBlock)) @property def address(self) -> ChecksumAddress: return self._address @address.setter def address(self, value: ChecksumAddress) -> None: if self._address is None and not self._immutable: self._address = value else: raise ValueError( "address is already set to {0}. " "Resetting filter parameters is not permitted".format(self.address)) @property def ordered_args(self) -> Tuple[Any, ...]: return tuple(map(self.args.__getitem__, self._ordered_arg_names)) @property # type: ignore @to_tuple def indexed_args(self) -> Tuple[Any, ...]: return tuple(filter(is_indexed, self.ordered_args)) @property # type: ignore @to_tuple def data_args(self) -> Tuple[Any, ...]: return tuple(filter(is_not_indexed, self.ordered_args)) @property def topics(self) -> List[HexStr]: arg_topics = tuple(arg.match_values for arg in self.indexed_args) return normalize_topic_list(cons(to_hex(self.event_topic), arg_topics)) @property def data_argument_values(self) -> Tuple[Any, ...]: if self.data_args is not None: return tuple(arg.match_values for arg in self.data_args) else: return (None,) @property def filter_params(self) -> FilterParams: params = { "topics": self.topics, "fromBlock": self.fromBlock, "toBlock": self.toBlock, "address": self.address } return valfilter(lambda x: x is not None, params) def deploy(self, w3: "Web3") -> "LogFilter": if not isinstance(w3, web3.Web3): raise ValueError("Invalid web3 argument: got: {0}".format(repr(w3))) for arg in self.args.values(): arg._immutable = True self._immutable = True log_filter = cast("LogFilter", w3.eth.filter(self.filter_params)) log_filter.filter_params = self.filter_params log_filter.set_data_filters(self.data_argument_values) log_filter.builder = self if self.formatter is not None: log_filter.log_entry_formatter = self.formatter return log_filter
class EventFilterBuilder: formatter = None _fromBlock = None _toBlock = None _address = None _immutable = False def __init__(self, event_abi, formatter=None): self.event_abi = event_abi self.formatter = formatter self.event_topic = initialize_event_topics(self.event_abi) self.args = AttributeDict( _build_argument_filters_from_event_abi(event_abi)) self._ordered_arg_names = tuple(arg['name'] for arg in event_abi['inputs']) @property def fromBlock(self): return self._fromBlock @fromBlock.setter def fromBlock(self, value): if self._fromBlock is None and not self._immutable: self._fromBlock = value else: raise ValueError( "fromBlock is already set to {0}. " "Resetting filter parameters is not permitted".format(self._fromBlock)) @property def toBlock(self): return self._toBlock @toBlock.setter def toBlock(self, value): if self._toBlock is None and not self._immutable: self._toBlock = value else: raise ValueError( "toBlock is already set to {0}. " "Resetting filter parameters is not permitted".format(self._toBlock)) @property def address(self): return self._address @address.setter def address(self, value): if self._address is None and not self._immutable: self._address = value else: raise ValueError( "address is already set to {0}. " "Resetting filter parameters is not permitted".format(self.address)) @property def ordered_args(self): return tuple(map(self.args.__getitem__, self._ordered_arg_names)) @property @to_tuple def indexed_args(self): return tuple(filter(is_indexed, self.ordered_args)) @property @to_tuple def data_args(self): return tuple(filter(is_not_indexed, self.ordered_args)) @property def topics(self): arg_topics = tuple(arg.match_values for arg in self.indexed_args) return normalize_topic_list(cons(to_hex(self.event_topic), arg_topics)) @property def data_argument_values(self): if self.data_args is not None: return tuple(arg.match_values for arg in self.data_args) else: return (None,) @property def filter_params(self): params = { "topics": self.topics, "fromBlock": self.fromBlock, "toBlock": self.toBlock, "address": self.address } return valfilter(lambda x: x is not None, params) def deploy(self, w3): if not isinstance(w3, web3.Web3): raise ValueError("Invalid web3 argument: got: {0}".format(repr(w3))) for arg in self.args.values(): arg._immutable = True self._immutable = True log_filter = w3.eth.filter(self.filter_params) log_filter.filter_params = self.filter_params log_filter.set_data_filters(self.data_argument_values) log_filter.builder = self if self.formatter is not None: log_filter.log_entry_formatter = self.formatter return log_filter