Hello, universe!
Hello, world!
"""
- __slots__ = ['_func', '_args', '_kwargs', '_value', '_is_cache_enabled']
+ __slots__ = ['_func', '_args', '_kwargs', '_value', '_is_cache_enabled', '_attribute_error']
def __init__(self, func, *args, **kwargs):
is_cache_enabled = kwargs.pop('enable_cache', True)
object.__setattr__(self, '_kwargs', kwargs)
object.__setattr__(self, '_is_cache_enabled', is_cache_enabled)
object.__setattr__(self, '_value', None)
+ object.__setattr__(self, '_attribute_error', None)
@property
def value(self):
if self._value is None:
- value = self._func(*self._args, **self._kwargs)
+ try:
+ value = self._func(*self._args, **self._kwargs)
+ except AttributeError as error:
+ object.__setattr__(self, '_attribute_error', error)
+ raise
+
if not self._is_cache_enabled:
return value
object.__setattr__(self, '_value', value)
delattr(self.value, name)
def __getattr__(self, name):
+ if self._attribute_error is not None:
+ raise self._attribute_error
return getattr(self.value, name)
def __setattr__(self, name, value):
self.assertEqual(2, proxy.value)
self.assertEqual(1, proxy_deepcopy.value)
+ def test_handle_attribute_error(self):
+
+ def raise_attribute_error():
+ raise AttributeError('message')
+
+ proxy = support.LazyProxy(raise_attribute_error)
+ with pytest.raises(AttributeError) as exception:
+ proxy.value
+
+ self.assertEqual('message', str(exception.value))
+
def test_format_date():
fmt = support.Format('en_US')