From 5da350668713ffbb73250a68c32471a3056ade1c Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Wed, 4 Oct 2023 10:47:10 -0500 Subject: [PATCH] chore: wip --- src/ape/api/networks.py | 2 +- src/ape/managers/converters.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ape/api/networks.py b/src/ape/api/networks.py index 37fc75c753..7efbcbf853 100644 --- a/src/ape/api/networks.py +++ b/src/ape/api/networks.py @@ -271,7 +271,7 @@ def default_network(self) -> str: return self.networks[0] # Very unlikely scenario. - raise ValueError("No networks found.") + raise NetworkError("No networks found.") def set_default_network(self, network_name: str): """ diff --git a/src/ape/managers/converters.py b/src/ape/managers/converters.py index dd9f717f74..bb19253aee 100644 --- a/src/ape/managers/converters.py +++ b/src/ape/managers/converters.py @@ -1,6 +1,7 @@ from datetime import datetime, timedelta, timezone from decimal import Decimal from typing import Any, Dict, List, Sequence, Tuple, Type, Union +from eth_typing.evm import ChecksumAddress from dateutil.parser import parse # type: ignore from eth_utils import ( @@ -270,7 +271,7 @@ def _converters(self) -> Dict[Type, List[ConverterAPI]]: for plugin_name, (conversion_type, converter_class) in self.plugin_manager.converters: converter = converter_class() if conversion_type not in converters: - options = ", ".join([t.__name__ for t in converters]) + options = ", ".join([_get_type_name_from_type(t) for t in converters]) raise ConversionError(f"Type '{conversion_type}' must be one of [{options}].") converters[conversion_type].append(converter) @@ -329,7 +330,7 @@ def convert(self, value: Any, type: Union[Type, Tuple, List]) -> Any: ) elif type not in self._converters: - options = ", ".join([t.__name__ for t in self._converters]) + options = ", ".join([_get_type_name_from_type(t) for t in self._converters]) raise ConversionError(f"Type '{type}' must be one of [{options}].") elif self.is_type(value, type) and not isinstance(value, (list, tuple)): @@ -408,3 +409,13 @@ def get_real_type(type_): converted_fields[field_name] = converted_value return {**kwargs, **converted_fields} + + +def _get_type_name_from_type(var_type: Type) -> str: + if var_type.__name__ == "Annotated" and (real_types := getattr(var_type, "__args__", None)): + # Is a NewType + result = real_types[0].__name__ + if result == ChecksumAddress.__name__: + return "AddressType" + + return var_type.__name__