Skip to content

Commit 1a09913

Browse files
authored
fix: issue detecting proper message from certain virtual machine errors (#111)
1 parent 1d4fe1a commit 1a09913

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

ape_foundry/provider.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,15 @@ def get_virtual_machine_error(self, exception: Exception, **kwargs) -> VirtualMa
616616
return VirtualMachineError(base_err=exception, **kwargs)
617617

618618
err_data = exception.args[0]
619-
message = str(err_data.get("message")) if isinstance(err_data, dict) else err_data
619+
620+
if isinstance(err_data, dict):
621+
message = str(err_data.get("message", f"{err_data}"))
622+
elif isinstance(err_data, str):
623+
message = err_data
624+
elif msg := getattr(exception, "message", ""):
625+
message = msg
626+
else:
627+
message = ""
620628

621629
if not message:
622630
return VirtualMachineError(base_err=exception, **kwargs)

tests/test_provider.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ape.api import TraceAPI
66
from ape.api.accounts import ImpersonatedAccount
77
from ape.contracts import ContractContainer
8-
from ape.exceptions import ContractLogicError, TransactionError
8+
from ape.exceptions import ContractLogicError, TransactionError, VirtualMachineError
99
from ape_ethereum.trace import Trace
1010
from ape_ethereum.transactions import TransactionStatusEnum, TransactionType
1111
from eth_pydantic_types import HashBytes32
@@ -348,6 +348,13 @@ def test_get_virtual_machine_error_from_contract_logic_message_includes_base_err
348348
assert actual.base_err == exception
349349

350350

351+
def test_get_virtual_machine_error_first_arg_not_message(connected_provider):
352+
# Handling weird edge case I have not seen in the wild but was raised in a GH issue.
353+
exception = Exception(Exception())
354+
actual = connected_provider.get_virtual_machine_error(exception)
355+
assert isinstance(actual, VirtualMachineError)
356+
357+
351358
def test_no_mining(project, local_network, connected_provider):
352359
assert "--no-mining" not in connected_provider.build_command()
353360
with project.temp_config(foundry={"auto_mine": "false"}):

0 commit comments

Comments
 (0)