From de098c79eade9fc6e52d9d5b1b6e77cf2a086e44 Mon Sep 17 00:00:00 2001 From: Dylan Wilson Date: Mon, 30 Jul 2018 10:24:15 -0700 Subject: [PATCH] Disallow merging topic lists --- ...est_contract_createFilter_topic_merging.py | 27 ++++++------------- web3/utils/filters.py | 9 ++++--- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/tests/core/filtering/test_contract_createFilter_topic_merging.py b/tests/core/filtering/test_contract_createFilter_topic_merging.py index 76b177ada6..61ed78c173 100644 --- a/tests/core/filtering/test_contract_createFilter_topic_merging.py +++ b/tests/core/filtering/test_contract_createFilter_topic_merging.py @@ -1,3 +1,6 @@ +import pytest + + def test_merged_topic_list_event( web3, emitter, @@ -9,22 +12,8 @@ def test_merged_topic_list_event( '0x0000000000000000000000000000000000000000000000000000000000000457', # 1111 '0x0000000000000000000000000000000000000000000000000000000000000457', # 1111 ] - log_filter = emitter.events.LogTripleWithIndex().createFilter( - fromBlock="latest", - topics=manual_topics, - argument_filters={'arg0': 2222, 'arg1': 2222, 'arg2': 2222}) - event_id = getattr(emitter_event_ids, 'LogTripleWithIndex') - txn_hashes = [ - emitter.functions.logTriple(event_id, 1111, 1111, 1111).transact(), - emitter.functions.logTriple(event_id, 1111, 1111, 2222).transact(), - emitter.functions.logTriple(event_id, 1111, 2222, 1111).transact(), - emitter.functions.logTriple(event_id, 2222, 1111, 1111).transact(), - emitter.functions.logTriple(event_id, 2222, 1111, 2222).transact(), - emitter.functions.logTriple(event_id, 1111, 2222, 2222).transact(), - emitter.functions.logTriple(event_id, 2222, 2222, 1111).transact(), - emitter.functions.logTriple(event_id, 2222, 2222, 2222).transact() - ] - while True: - if all(wait_for_transaction(web3, txn_hash) for txn_hash in txn_hashes): - break - assert len(log_filter.get_all_entries()) == 2 + with pytest.raises(TypeError): + emitter.events.LogTripleWithIndex().createFilter( + fromBlock="latest", + topics=manual_topics, + argument_filters={'arg0': 2222, 'arg1': 2222, 'arg2': 2222}) diff --git a/web3/utils/filters.py b/web3/utils/filters.py index caccf65072..3dd26b9981 100644 --- a/web3/utils/filters.py +++ b/web3/utils/filters.py @@ -26,11 +26,12 @@ def construct_event_filter_params(event_abi, toBlock=None, address=None): filter_params = {} + topic_set = construct_event_topic_set(event_abi, argument_filters) - if topics is None: - topic_set = construct_event_topic_set(event_abi, argument_filters) - else: - topic_set = [topics] + construct_event_topic_set(event_abi, argument_filters) + if topics is not None and len(topic_set) != 0: + raise TypeError( + "Merging the topics argument with topics generated " + "from argument_filters is not supported.") if len(topic_set) == 1 and is_list_like(topic_set[0]): filter_params['topics'] = topic_set[0]