def _check_key_type(self, key, key_value): if not isinstance(key_value, key.key_type): raise TableKeyTypeError(self.name, key.key_name, friendly_type_name(key.key_type), friendly_type_name(type(key_value)), )
def _raise_invalid_type_error(self): _raw_value_type = type(self.raw_value()) actual_type: str = friendly_type_name(_raw_value_type) raise ConfigValueTypeError( self.path, f'config value must be of type "{self.type_name}", got "{actual_type}" instead.' )
def _cast(self, raw_value: object) -> list: if not isinstance(raw_value, list): return self._raise_invalid_type_error() for index, item in enumerate(raw_value): if not isinstance(item, self.element_type): actual_type = friendly_type_name(type(item)) raise ConfigValueTypeError( self.path, f'{self.name}: item at index {index} should be a "{self._expected_element_type}", but is ' f'"{actual_type}" instead') return raw_value
def test_element_type_check(value: ConfigValueList, not_a_string): value.default = ['string', 'string_too', not_a_string] actual_type = _utils.friendly_type_name(type(not_a_string)) error = f'{value.name}: item at index 2 should be a "string", but is "{actual_type}" instead' with pytest.raises(ConfigValueTypeError, match=error): value()
def _expected_element_type(self) -> str: return friendly_type_name(self.element_type)
def test_friendly_type_name(raw_type, friendly_name): assert friendly_name == _utils.friendly_type_name(raw_type)
def user_friendly_type(self) -> str: """ :return: user friendly type of the key :rtype: str """ return friendly_type_name(self.key_type)