73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
'''
|
|
Function:
|
|
Implementation of BaseModuleBuilder
|
|
Author:
|
|
Zhenchao Jin
|
|
WeChat Official Account (微信公众号):
|
|
Charles的皮卡丘
|
|
'''
|
|
import copy
|
|
import collections
|
|
|
|
|
|
'''BaseModuleBuilder'''
|
|
class BaseModuleBuilder():
|
|
REGISTERED_MODULES = collections.OrderedDict()
|
|
def __init__(self, requires_register_modules=None, requires_renew_modules=None):
|
|
if requires_register_modules is not None and isinstance(requires_register_modules, (dict, collections.OrderedDict)):
|
|
for name, module in requires_register_modules.items(): self.register(name, module)
|
|
if requires_renew_modules is not None and isinstance(requires_renew_modules, (dict, collections.OrderedDict)):
|
|
for name, module in requires_renew_modules.items(): self.renew(name, module)
|
|
self.validate()
|
|
'''build'''
|
|
def build(self, module_cfg):
|
|
module_cfg = copy.deepcopy(module_cfg)
|
|
module_type = module_cfg.pop('type')
|
|
module = self.REGISTERED_MODULES[module_type](**module_cfg)
|
|
return module
|
|
'''register'''
|
|
def register(self, name, module):
|
|
assert callable(module)
|
|
assert name not in self.REGISTERED_MODULES
|
|
self.REGISTERED_MODULES[name] = module
|
|
'''renew'''
|
|
def renew(self, name, module):
|
|
assert callable(module)
|
|
assert name in self.REGISTERED_MODULES
|
|
self.REGISTERED_MODULES[name] = module
|
|
'''validate'''
|
|
def validate(self):
|
|
for _, module in self.REGISTERED_MODULES.items():
|
|
assert callable(module)
|
|
'''delete'''
|
|
def delete(self, name):
|
|
assert name in self.REGISTERED_MODULES
|
|
del self.REGISTERED_MODULES[name]
|
|
'''pop'''
|
|
def pop(self, name):
|
|
assert name in self.REGISTERED_MODULES
|
|
module = self.REGISTERED_MODULES.pop(name)
|
|
return module
|
|
'''get'''
|
|
def get(self, name):
|
|
assert name in self.REGISTERED_MODULES
|
|
module = self.REGISTERED_MODULES.get(name)
|
|
return module
|
|
'''items'''
|
|
def items(self):
|
|
return self.REGISTERED_MODULES.items()
|
|
'''clear'''
|
|
def clear(self):
|
|
return self.REGISTERED_MODULES.clear()
|
|
'''values'''
|
|
def values(self):
|
|
return self.REGISTERED_MODULES.values()
|
|
'''keys'''
|
|
def keys(self):
|
|
return self.REGISTERED_MODULES.keys()
|
|
'''copy'''
|
|
def copy(self):
|
|
return self.REGISTERED_MODULES.copy()
|
|
'''update'''
|
|
def update(self, requires_update_modules):
|
|
return self.REGISTERED_MODULES.update(requires_update_modules) |