コード例 #1
0
ファイル: eth.py プロジェクト: whoerau/web3.py
 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.")
コード例 #2
0
 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)
コード例 #3
0
ファイル: method_formatters.py プロジェクト: omarish/web3.py
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}')