Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Brownie KeyError in Local & Remote CI #557

Closed
trentmc opened this issue May 9, 2023 · 0 comments · Fixed by #559
Closed

Brownie KeyError in Local & Remote CI #557

trentmc opened this issue May 9, 2023 · 0 comments · Fixed by #559
Assignees
Labels
Type: Bug Something isn't working

Comments

@trentmc
Copy link
Member

trentmc commented May 9, 2023

Background

In both local CI and remote CI, Brownie can get a KeyError:

  File "brownie/project/main.py", line 494, in close
    _remove_contract(contract)
  File "brownie/network/state.py", line 586, in _remove_contract
    del _contract_map[contract.address]
KeyError: '0x02175de5A7F168517688e3E93f55936C9c2C7A19'

Below is details for (a) local (b) remote.

KeyError in Local CI

(Taken from README. Written a few months ago.)

When pytest winds down, Brownie emits a KeyError:

  File "brownie/project/main.py", line 494, in close
    _remove_contract(contract)
  File "brownie/network/state.py", line 586, in _remove_contract
    del _contract_map[contract.address]
KeyError: '0x02175de5A7F168517688e3E93f55936C9c2C7A19'

The problem: it's attempting del _contract_map[contract.address] but that contract has already been deleted. This was reported in brownie#1144 for Contract.at() calls. We don't have at() calls yet get it in df-py (only as of Dec 2022). We don't see the issue in ocean.py.

The workaround: open ./venv/lib/python3.10/site-packages/brownie/network/state.py, and change _remove_contract() to the following:

def _remove_contract(contract: Any) -> None:
    try:
        del _contract_map[contract.address]
    except:
        # workaround for brownie issue
        # https://github.com/eth-brownie/brownie/issues/1144
        pass

KeyError in Remote CI

Where seen: in this PR for issue#539.

Log.

Traceback:


Attached to local RPC client listening at '127.0.0.1:8545'...
============================= test session starts ==============================
platform linux -- Python 3.8.16, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /home/runner/work/df-py/df-py
plugins: web3-5.31.3, xdist-1.34.0, forked-1.4.0, eth-brownie-1.19.3, hypothesis-6.27.3
collected 267 items

util/test/test_DFRewards.py ........                                     [  2%]
util/test/test_DFRewards_allocate_gas.py ...                             [  4%]
util/test/test_DFRewards_withdraw.py ...                                 [  5%]
util/test/test_Simpletoken.py ...                                        [  6%]
util/test/test_allocations.py .....                                      [  8%]
util/test/test_blockrange.py ..............                              [ 13%]
util/test/test_blocktime_eth_mainnet.py .....                            [ 15%]
util/test/test_blocktime_ganache.py ........                             [ 18%]
util/test/test_calc_did.py .                                             [ 18%]
util/test/test_calcrewards.py .....................................s...  [ 34%]
util/test/test_cleancase.py ..........                                   [ 37%]
util/test/test_contract_persistence.py ..                                [ 38%]
util/test/test_csvs.py ..................                                [ 45%]
util/test/test_dftool.py .....s....                                      [ 49%]
util/test/test_dispense.py ...                                           [ 50%]
util/test/test_getrate.py .....ss                                        [ 52%]
util/test/test_goerli.py ...                                             [ 53%]
util/test/test_judge.py ......                                           [ 56%]
util/test/test_networkutil.py ....                                       [ 57%]
util/test/test_oceanutil.py .....                                        [ 59%]
util/test/test_query.py ...............                                  [ 65%]
util/test/test_retryfunction.py .                                        [ 65%]
util/test/test_thegraph.py .                                             [ 65%]
util/test/test_tok.py ......                                             [ 68%]
util/test/test_tousd.py .........                                        [ 71%]
util/test/test_vesting_schedule.py ..................................... [ 85%]
......................                                                   [ 93%]
util/test/veOcean/test_allocate_dt.py .......                            [ 96%]
util/test/veOcean/test_delegation.py .                                   [ 96%]
util/test/veOcean/test_deploy.py .                                       [ 97%]
util/test/veOcean/test_estimateclaim.py .                                [ 97%]
util/test/veOcean/test_fee_dist.py ...                                   [ 98%]
util/test/veOcean/test_fee_estimate.py .                                 [ 98%]
util/test/veOcean/test_lock.py .                                         [ 99%]
/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/brownie/network/main.py:44: BrownieEnvironmentWarning: Development network has a block height of 25
  warnings.warn(
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pytest/__main__.py", line 5, in <module>
    raise SystemExit(pytest.console_main())
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/_pytest/config/__init__.py", line 185, in console_main
    code = main()
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/_pytest/config/__init__.py", line 162, in main
    ret: Union[ExitCode, int] = config.hook.pytest_cmdline_main(
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_callers.py", line 60, in _multicall
    return outcome.get_result()
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_result.py", line 60, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/_pytest/main.py", line 316, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/_pytest/main.py", line 311, in wrap_session
    config._ensure_unconfigure()
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/_pytest/config/__init__.py", line 987, in _ensure_unconfigure
    self.hook.pytest_unconfigure(config=self)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_callers.py", line 60, in _multicall
    return outcome.get_result()
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_result.py", line 60, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/pluggy/_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/brownie/test/managers/base.py", line 267, in pytest_unconfigure
    project.close(raises=False)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/brownie/project/main.py", line 494, in close
    _remove_contract(contract)
  File "/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/brownie/network/state.py", line 586, in _remove_contract
    del _contract_map[contract.address]
KeyError: '0x471817de04FAa9B616ED7644117d957439717bF9'
util/test/veOcean/test_whitelist_sc.py ..                                [100%]

=============================== warnings summary ===============================
util/test/test_query.py:38
  /home/runner/work/df-py/df-py/util/test/test_query.py:38: PytestUnknownMarkWarning: Unknown pytest.mark.timeout - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    @pytest.mark.timeout(300)

util/test/test_oceanutil.py: 13 warnings
util/test/test_query.py: 75 warnings
util/test/veOcean/test_allocate_dt.py: 2 warnings
  /opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/eth_abi/codec.py:191: DeprecationWarning: abi.decode_abi() is deprecated and will be removed in version 4.0.0 in favor of abi.decode()
    warnings.warn(

util/test/test_oceanutil.py: 20 warnings
util/test/test_query.py: 125 warnings
util/test/veOcean/test_allocate_dt.py: 4 warnings
  /opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/eth_abi/codec.py:164: DeprecationWarning: abi.decode_single() is deprecated and will be removed in version 4.0.0 in favor of abi.decode()
    warnings.warn(

util/test/test_oceanutil.py::test_createDataNFT
  /opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/brownie/network/event.py:490: UserWarning: 0x832205068355eEc6Bb8a19117d9c249b689D7d07: Event log does not contain enough topics for the given ABI - this is usually because an event argument is not marked as indexed
    warnings.warn(f"{address}: {exc}")

...

util/test/test_query.py::test_all
  /opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/brownie/network/event.py:490: UserWarning: 0xE3ecFF59534cEd6aBBdE77A019f3d79E149A4480: Event log does not contain enough topics for the given ABI - this is usually because an event argument is not marked as indexed
    warnings.warn(f"{address}: {exc}")

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=========== 263 passed, 4 skipped, 247 warnings in 483.93s (0:08:03) ===========
Error: Process completed with exit code 1.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants