[docs]class Factory:
def __getitem__(self, key):
return self.get(key)
def __init__(self):
self.factory_map = dict()
def __contains__(self, item):
return item in self.factory_map
[docs] def register(self, key):
def wrapper(value):
if key in self.factory_map:
if self.factory_map[key] is not value:
raise KeyError(f'{key} already exists')
else:
self.factory_map[key] = value
return value
return wrapper
[docs] def register_item(self, key, value):
return self.register(key)(value)
[docs] def unregister(self, key):
if key not in self.factory_map:
raise KeyError(f'{key} does not exist')
del self.factory_map[key]
[docs] def get(self, key):
return self.factory_map[key]
[docs] def get_registered_keys(self):
return list(self.factory_map.keys())
[docs] def get_registered_values(self):
return list(self.factory_map.values())