Workaround for importing objects from old path

Many projects are importing secrets and containers from barbicanclient,
the refactor change needs to keep compatiable for this.

This is workaround for that and marked as deprecation.

Change-Id: Ibc9b525f1abe0a7627759e438977a6bf6b86bed6
Closes-bug: #1706841
This commit is contained in:
Jeremy Liu 2017-07-27 15:08:54 +08:00
parent adce2c1a60
commit 49505b9aec
1 changed files with 46 additions and 0 deletions

View File

@ -15,8 +15,54 @@
"""Barbican Client Library Binding"""
import importlib
import sys
import warnings
import pbr.version
from barbicanclient.v1 import acls
from barbicanclient.v1 import cas
from barbicanclient.v1 import containers
from barbicanclient.v1 import orders
from barbicanclient.v1 import secrets
version_info = pbr.version.VersionInfo("python-barbicanclient")
__version__ = version_info.version_string()
__all__ = (
'acls',
'cas',
'containers',
'orders',
'secrets',
)
class _LazyImporter(object):
def __init__(self, module):
self._module = module
def __getattr__(self, name):
# This is only called until the import has been done.
lazy_submodules = [
'acls',
'cas',
'containers',
'orders',
'secrets',
]
if name in lazy_submodules:
warnings.warn("The %s module is moved to barbicanclient/v1 "
"directory, direct import of barbicanclient.%s "
"will be deprecated. Please import "
"barbicanclient.v1.%s instead."
% (name, name, name))
return importlib.import_module('barbicanclient.v1.%s' % name)
# Return module attributes like __all__ etc.
return getattr(self._module, name)
sys.modules[__name__] = _LazyImporter(sys.modules[__name__])