def middleware(method, params): response = make_request(method, params) if 'result' in response: result = response['result'] if is_dict(result) and not isinstance(result, AttributeDict): return assoc(response, 'result', AttributeDict.recursive(result)) else: return response else: return response
def test_attributedict_dict_in_list_in_dict(): data = { 'instructions': [ 0, 1, 'neither shalt thou count, excepting that thou then proceedeth to three', { 'if_naughty': 'snuff it' }, 'shalt thou not count', 'right out', ] } attrdict = AttributeDict.recursive(data) assert attrdict.instructions[3].if_naughty == 'snuff it'
def test_attributedict_equality(dict1, dict2): assert AttributeDict(dict1) == dict2 assert AttributeDict(dict1) == AttributeDict(dict2) assert dict1 == AttributeDict(dict2)
def test_attributedict_delitem_invalid(): container = AttributeDict({'a': 1}) with pytest.raises(TypeError): del container['a'] assert container['a'] == 1
def test_attributedict_setattr_invalid(): container = AttributeDict({'a': 1}) with pytest.raises(TypeError): container.a = 0 assert container.a == 1
def test_attributedict_repr(): dict1 = AttributeDict({'a': 1}) dict2 = eval(repr(dict1)) assert dict1 == dict2
def test_attributedict_access(): container = AttributeDict({'a': 1}) assert container.a == 1
def test_attributedict_set_in_recursive_dict(): data = {'mydict': {'myset': {'found'}}} attrdict = AttributeDict.recursive(data) assert 'found' in attrdict.mydict.myset
def test_attributedict_sequence_with_dict(sequence): data = sequence(['a', {'found': True}, 'c']) dict_in_sequence = AttributeDict.recursive(data) assert dict_in_sequence[1].found is True
def test_attributedict_recursive_dict(): w = AttributeDict.recursive({'x': {'y': {'z': 8}}}) assert w.x.y.z == 8
def test_attributedict_inequality(dict1, dict2): assert AttributeDict(dict1) != dict2 assert AttributeDict(dict1) != AttributeDict(dict2) assert dict1 != AttributeDict(dict2)
def get_event_data(event_abi, log_entry): """ Given an event ABI and a log entry for that event, return the decoded event data """ if event_abi['anonymous']: log_topics = log_entry['topics'] elif not log_entry['topics']: raise MismatchedABI("Expected non-anonymous event to have 1 or more topics") elif event_abi_to_log_topic(event_abi) != log_entry['topics'][0]: raise MismatchedABI("The event signature did not match the provided ABI") else: log_topics = log_entry['topics'][1:] log_topics_abi = get_indexed_event_inputs(event_abi) log_topic_normalized_inputs = normalize_event_input_types(log_topics_abi) log_topic_types = get_event_abi_types_for_decoding(log_topic_normalized_inputs) log_topic_names = get_abi_input_names({'inputs': log_topics_abi}) if len(log_topics) != len(log_topic_types): raise ValueError("Expected {0} log topics. Got {1}".format( len(log_topic_types), len(log_topics), )) log_data = hexstr_if_str(to_bytes, log_entry['data']) log_data_abi = exclude_indexed_event_inputs(event_abi) log_data_normalized_inputs = normalize_event_input_types(log_data_abi) log_data_types = get_event_abi_types_for_decoding(log_data_normalized_inputs) log_data_names = get_abi_input_names({'inputs': log_data_abi}) # sanity check that there are not name intersections between the topic # names and the data argument names. duplicate_names = set(log_topic_names).intersection(log_data_names) if duplicate_names: raise ValueError( "Invalid Event ABI: The following argument names are duplicated " "between event inputs: '{0}'".format(', '.join(duplicate_names)) ) decoded_log_data = decode_abi(log_data_types, log_data) normalized_log_data = map_abi_data( BASE_RETURN_NORMALIZERS, log_data_types, decoded_log_data ) decoded_topic_data = [ decode_single(topic_type, topic_data) for topic_type, topic_data in zip(log_topic_types, log_topics) ] normalized_topic_data = map_abi_data( BASE_RETURN_NORMALIZERS, log_topic_types, decoded_topic_data ) event_args = dict(itertools.chain( zip(log_topic_names, normalized_topic_data), zip(log_data_names, normalized_log_data), )) event_data = { 'args': event_args, 'event': event_abi['name'], 'logIndex': log_entry['logIndex'], 'transactionIndex': log_entry['transactionIndex'], 'transactionHash': log_entry['transactionHash'], 'address': log_entry['address'], 'blockHash': log_entry['blockHash'], 'blockNumber': log_entry['blockNumber'], } return AttributeDict.recursive(event_data)
def stub_block(timestamp): return AttributeDict({ 'timestamp': timestamp, 'number': 123, })