Files

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)