提交 df907c3a 编写于 作者: W wuzewu

Add keyword args in _initialize

上级 dfd6347b
...@@ -138,12 +138,18 @@ class Module(object): ...@@ -138,12 +138,18 @@ class Module(object):
_record = {} _record = {}
def __new__(cls, name=None, directory=None, module_dir=None, version=None): def __new__(cls,
name=None,
directory=None,
module_dir=None,
version=None,
**kwargs):
if cls.__name__ == "Module": if cls.__name__ == "Module":
if name: if name:
module = cls.init_with_name(name=name, version=version) module = cls.init_with_name(
name=name, version=version, **kwargs)
elif directory: elif directory:
module = cls.init_with_directory(directory=directory) module = cls.init_with_directory(directory=directory, **kwargs)
elif module_dir: elif module_dir:
logger.warning( logger.warning(
"Parameter module_dir is deprecated, please use directory to specify the path" "Parameter module_dir is deprecated, please use directory to specify the path"
...@@ -154,15 +160,19 @@ class Module(object): ...@@ -154,15 +160,19 @@ class Module(object):
version = module_dir[1] version = module_dir[1]
else: else:
directory = module_dir directory = module_dir
module = cls.init_with_directory(directory=directory) module = cls.init_with_directory(directory=directory, **kwargs)
CacheUpdater("update_cache", module.name, module.version).start() CacheUpdater("update_cache", module.name, module.version).start()
else: else:
module = object.__new__(cls) module = object.__new__(cls)
return module return module
def __init__(self, name=None, directory=None, module_dir=None, def __init__(self,
version=None): name=None,
directory=None,
module_dir=None,
version=None,
**kwargs):
# Avoid module being initialized multiple times # Avoid module being initialized multiple times
if not directory or id(self) in Module._record: if not directory or id(self) in Module._record:
return return
...@@ -195,10 +205,10 @@ class Module(object): ...@@ -195,10 +205,10 @@ class Module(object):
self._summary = utils.from_module_attr_to_pyobj( self._summary = utils.from_module_attr_to_pyobj(
module_info.map.data['summary']) module_info.map.data['summary'])
self._initialize() self._initialize(**kwargs)
@classmethod @classmethod
def init_with_name(cls, name, version=None): def init_with_name(cls, name, version=None, **kwargs):
fp_lock = open(os.path.join(CACHE_HOME, name), "a") fp_lock = open(os.path.join(CACHE_HOME, name), "a")
lock.flock(fp_lock, lock.LOCK_EX) lock.flock(fp_lock, lock.LOCK_EX)
log_msg = "Installing %s module" % name log_msg = "Installing %s module" % name
...@@ -214,10 +224,10 @@ class Module(object): ...@@ -214,10 +224,10 @@ class Module(object):
logger.info(tips) logger.info(tips)
lock.flock(fp_lock, lock.LOCK_UN) lock.flock(fp_lock, lock.LOCK_UN)
return cls.init_with_directory(directory=module_dir[0]) return cls.init_with_directory(directory=module_dir[0], **kwargs)
@classmethod @classmethod
def init_with_directory(cls, directory): def init_with_directory(cls, directory, **kwargs):
desc_file = os.path.join(directory, MODULE_DESC_PBNAME) desc_file = os.path.join(directory, MODULE_DESC_PBNAME)
checker = ModuleChecker(directory) checker = ModuleChecker(directory)
checker.check() checker.check()
...@@ -229,10 +239,10 @@ class Module(object): ...@@ -229,10 +239,10 @@ class Module(object):
if 'module' in sys.modules: if 'module' in sys.modules:
sys.modules.pop('module') sys.modules.pop('module')
_module = importlib.import_module("module") _module = importlib.import_module("module")
user_module = _module.HubModule(directory=directory) user_module = _module.HubModule(directory=directory, **kwargs)
sys.path.pop(0) sys.path.pop(0)
return user_module return user_module
return ModuleV1(directory=directory) return ModuleV1(directory=directory, **kwargs)
@property @property
def run_func(self): def run_func(self):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册