| # Copyright 2017 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """A common module for FAFT client.""" |
| |
| class LazyInitHandlerProxy: |
| """Proxy of a given handler_class for lazy initialization.""" |
| _loaded = False |
| _obj = None |
| |
| def __init__(self, handler_class, *args, **kargs): |
| self._handler_class = handler_class |
| self._args = args |
| self._kargs = kargs |
| |
| def _load(self): |
| self._obj = self._handler_class() |
| self._obj.init(*self._args, **self._kargs) |
| self._loaded = True |
| |
| def __getattr__(self, name): |
| if not self._loaded: |
| self._load() |
| return getattr(self._obj, name) |
| |
| def reload(self): |
| """Reload the handler class.""" |
| self._loaded = False |