Example #1
0
def construct_event_filter_params(
    event_abi: ABIEvent,
    abi_codec: ABICodec,
    contract_address: Optional[ChecksumAddress] = None,
    argument_filters: Optional[Dict[str, Any]] = None,
    topics: Optional[Sequence[HexStr]] = None,
    fromBlock: Optional[BlockIdentifier] = None,
    toBlock: Optional[BlockIdentifier] = None,
    address: Optional[ChecksumAddress] = None
) -> Tuple[List[List[Optional[HexStr]]], FilterParams]:
    filter_params: FilterParams = {}
    topic_set: Sequence[HexStr] = construct_event_topic_set(
        event_abi, abi_codec, argument_filters)

    if topics is not None:
        if len(topic_set) > 1:
            raise TypeError(
                "Merging the topics argument with topics generated "
                "from argument_filters is not supported.")
        topic_set = topics

    if len(topic_set) == 1 and is_list_like(topic_set[0]):
        # type ignored b/c list-like check on line 88
        filter_params['topics'] = topic_set[0]  # type: ignore
    else:
        filter_params['topics'] = topic_set

    if address and contract_address:
        if is_list_like(address):
            filter_params['address'] = [address] + [contract_address]
        elif is_string(address):
            filter_params['address'] = [address, contract_address]
        else:
            raise ValueError(
                "Unsupported type for `address` parameter: {0}".format(
                    type(address)))
    elif address:
        filter_params['address'] = address
    elif contract_address:
        filter_params['address'] = contract_address

    if 'address' not in filter_params:
        pass
    elif is_list_like(filter_params['address']):
        for addr in filter_params['address']:
            validate_address(addr)
    else:
        validate_address(filter_params['address'])

    if fromBlock is not None:
        filter_params['fromBlock'] = fromBlock

    if toBlock is not None:
        filter_params['toBlock'] = toBlock

    data_filters_set = construct_event_data_set(event_abi, abi_codec,
                                                argument_filters)

    return data_filters_set, filter_params
def test_construct_event_data_set_strict_with_errors(w3_strict_abi, arguments,
                                                     expected_error):
    with pytest.raises(expected_error):
        construct_event_data_set(EVENT_2_ABI, w3_strict_abi.codec, arguments)
def test_construct_event_data_set_strict(w3_strict_abi, arguments, expected):
    actual = construct_event_data_set(EVENT_1_ABI, w3_strict_abi.codec,
                                      arguments)
    assert actual == expected
def test_construct_event_data_set(web3, arguments, expected):
    actual = construct_event_data_set(EVENT_1_ABI, web3.codec, arguments)
    assert actual == expected
def test_construct_event_data_set(event_abi, arguments, expected):
    actual = construct_event_data_set(event_abi, arguments)
    assert actual == expected