| @@ -36,11 +36,21 @@ __all__ = ["LazyImporter"] | |||||
| _real_get = ModuleType.__getattribute__ | _real_get = ModuleType.__getattribute__ | ||||
| def _create_failing_get(exc): | |||||
| def _fail(self, attr): | |||||
| raise exc | |||||
| return _fail | |||||
| def _mock_get(self, attr): | def _mock_get(self, attr): | ||||
| with _real_get(self, "_lock"): | with _real_get(self, "_lock"): | ||||
| if _real_get(self, "_unloaded"): | if _real_get(self, "_unloaded"): | ||||
| type(self)._unloaded = False | type(self)._unloaded = False | ||||
| reload(self) | |||||
| try: | |||||
| reload(self) | |||||
| except ImportError as exc: | |||||
| type(self).__getattribute__ = _create_failing_get(exc) | |||||
| del type(self)._lock | |||||
| raise | |||||
| type(self).__getattribute__ = _real_get | type(self).__getattribute__ = _real_get | ||||
| del type(self)._lock | del type(self)._lock | ||||
| return _real_get(self, attr) | return _real_get(self, attr) | ||||