Beispiel #1
0
    def middleware(method: RPCEndpoint, params: Any) -> RPCResponse:
        if method in NEW_FILTER_METHODS:

            filter_id = next(filter_id_counter)

            _filter: Union[RequestLogs, RequestBlocks]
            if method == RPC.eth_newFilter:
                _filter = RequestLogs(
                    w3, **apply_key_map(FILTER_PARAMS_KEY_MAP, params[0]))

            elif method == RPC.eth_newBlockFilter:
                _filter = RequestBlocks(w3)

            else:
                raise NotImplementedError(method)

            filters[filter_id] = _filter
            return {"result": filter_id}

        elif method in FILTER_CHANGES_METHODS:
            filter_id = params[0]
            #  Pass through to filters not created by middleware
            if filter_id not in filters:
                return make_request(method, params)
            _filter = filters[filter_id]
            if method == RPC.eth_getFilterChanges:
                return {"result": next(_filter.filter_changes)}
            elif method == RPC.eth_getFilterLogs:
                # type ignored b/c logic prevents RequestBlocks which doesn't implement get_logs
                return {"result": _filter.get_logs()}  # type: ignore
            else:
                raise NotImplementedError(method)
        else:
            return make_request(method, params)
Beispiel #2
0
    def middleware(method, params):
        if method in NEW_FILTER_METHODS:

            filter_id = next(filter_id_counter)

            if method == 'eth_newFilter':
                _filter = RequestLogs(
                    w3, **apply_key_map(FILTER_PARAMS_KEY_MAP, params[0]))

            elif method == 'eth_newBlockFilter':
                _filter = RequestBlocks(w3)

            else:
                raise NotImplementedError(method)

            filters[filter_id] = _filter
            return {'result': filter_id}

        elif method in FILTER_CHANGES_METHODS:
            filter_id = params[0]
            #  Pass through to filters not created by middleware
            if filter_id not in filters:
                return make_request(method, params)
            _filter = filters[filter_id]
            if method == 'eth_getFilterChanges':
                return {'result': next(_filter.filter_changes)}
            elif method == 'eth_getFilterLogs':
                return {'result': _filter.get_logs()}
            else:
                raise NotImplementedError(method)
        else:
            return make_request(method, params)
Beispiel #3
0
    def middleware(method, params):
        if method in NEW_FILTER_METHODS:

            filter_id = next(filter_id_counter)

            if method == 'eth_newFilter':
                _filter = RequestLogs(w3, **apply_key_map(FILTER_PARAMS_KEY_MAP, params[0]))

            elif method == 'eth_newBlockFilter':
                _filter = RequestBlocks(w3)

            else:
                raise NotImplementedError(method)

            filters[filter_id] = _filter
            return {'result': filter_id}

        elif method in FILTER_CHANGES_METHODS:
            filter_id = params[0]
            #  Pass through to filters not created by middleware
            if filter_id not in filters:
                return make_request(method, params)
            _filter = filters[filter_id]
            if method == 'eth_getFilterChanges':
                return {'result': next(_filter.filter_changes)}
            elif method == 'eth_getFilterLogs':
                return {'result': _filter.get_logs()}
            else:
                raise NotImplementedError(method)
        else:
            return make_request(method, params)
Beispiel #4
0
def return_filter(
        contract=None,
        args=[]):
    event_name = args[0]
    kwargs = apply_key_map({'filter': 'argument_filters'}, args[1])
    if 'fromBlock' not in kwargs:
        kwargs['fromBlock'] = 'latest'
    return contract.events[event_name].createFilter(**kwargs)
Beispiel #5
0
def return_filter(
        contract=None,
        args=[]):
    event_name = args[0]
    kwargs = apply_key_map({'filter': 'argument_filters'}, args[1])
    if 'fromBlock' not in kwargs:
        kwargs['fromBlock'] = 'latest'
    return contract.events[event_name].createFilter(**kwargs)
Beispiel #6
0
def return_filter_by_api(api_style=None, contract=None, args=[]):
    if api_style == 'v3':
        with pytest.deprecated_call():
            return contract.eventFilter(*args)
    elif api_style == 'v4':
        event_name = args[0]
        kwargs = apply_key_map({'filter': 'argument_filters'}, args[1])
        if 'fromBlock' not in kwargs:
            kwargs['fromBlock'] = 'latest'
        return getattr(contract.events, event_name).createFilter(**kwargs)
    else:
        raise ValueError("api_style must be 'v3 or v4'")
Beispiel #7
0
def test_apply_key_map(formatter, value, expected):
    assert eth_utils.apply_key_map(formatter, value) == expected

    mapper = apply_key_map(formatter)
    assert mapper(value) == expected
Beispiel #8
0
def test_apply_key_map_with_key_conflicts_raises_exception(formatter, value):
    with pytest.raises(KeyError):
        eth_utils.apply_key_map(formatter, value)