PyWxDump/pywxdump/common/config/oss_config_manager.py
2024-07-13 22:01:21 +08:00

40 lines
1.3 KiB
Python

from typing import Type
from pywxdump.common.config.oss_config.storage_config import StorageConfig
from pywxdump.file.ConfigurableAttachment import ConfigurableAttachment
def singleton(cls):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class OSSConfigManager:
def __init__(self):
self._config_instances = {}
self._attachment_instance = {}
def load_config(self, config: StorageConfig):
config.validate_config()
self._config_instances[config.type()] = config
# 清除旧的实例
self._attachment_instance[config.type()] = None
def get_config(self, config_type: str) -> StorageConfig:
return self._config_instances.get(config_type)
def get_attachment(self, config_type: str, instance_class: Type[ConfigurableAttachment]):
if config_type not in self._config_instances:
raise ValueError(f"Config not found: {config_type}")
if not self._attachment_instance[config_type]:
config = self._config_instances[config_type]
self._attachment_instance[config_type] = instance_class.load_config(config)
return self._attachment_instance[config_type]