fix: 统一存储
This commit is contained in:
155
python_core/storage/factory.py
Normal file
155
python_core/storage/factory.py
Normal file
@@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
存储工厂类
|
||||
"""
|
||||
|
||||
from typing import Type, Dict
|
||||
from .base import StorageInterface, StorageConfig, StorageType, StorageException
|
||||
from .json_storage import JSONStorage
|
||||
from python_core.utils.logger import logger
|
||||
|
||||
class StorageFactory:
|
||||
"""存储工厂类"""
|
||||
|
||||
_storage_classes: Dict[StorageType, Type[StorageInterface]] = {
|
||||
StorageType.JSON: JSONStorage,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def register_storage(cls, storage_type: StorageType, storage_class: Type[StorageInterface]):
|
||||
"""注册存储实现
|
||||
|
||||
Args:
|
||||
storage_type: 存储类型
|
||||
storage_class: 存储实现类
|
||||
"""
|
||||
cls._storage_classes[storage_type] = storage_class
|
||||
logger.info(f"Registered storage type: {storage_type.value}")
|
||||
|
||||
@classmethod
|
||||
def create_storage(cls, config: StorageConfig) -> StorageInterface:
|
||||
"""创建存储实例
|
||||
|
||||
Args:
|
||||
config: 存储配置
|
||||
|
||||
Returns:
|
||||
StorageInterface: 存储实例
|
||||
|
||||
Raises:
|
||||
StorageException: 当存储类型不支持时
|
||||
"""
|
||||
storage_type = config.storage_type
|
||||
|
||||
if storage_type not in cls._storage_classes:
|
||||
available_types = list(cls._storage_classes.keys())
|
||||
raise StorageException(
|
||||
f"Unsupported storage type: {storage_type.value}. "
|
||||
f"Available types: {[t.value for t in available_types]}"
|
||||
)
|
||||
|
||||
storage_class = cls._storage_classes[storage_type]
|
||||
|
||||
try:
|
||||
storage = storage_class(config)
|
||||
logger.info(f"Created storage instance: {storage_type.value}")
|
||||
return storage
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create storage instance {storage_type.value}: {e}")
|
||||
raise StorageException(f"Failed to create storage: {e}")
|
||||
|
||||
@classmethod
|
||||
def get_available_types(cls) -> list[StorageType]:
|
||||
"""获取可用的存储类型
|
||||
|
||||
Returns:
|
||||
List[StorageType]: 可用的存储类型列表
|
||||
"""
|
||||
return list(cls._storage_classes.keys())
|
||||
|
||||
@classmethod
|
||||
def create_json_storage(cls, base_path: str = None) -> StorageInterface:
|
||||
"""创建JSON存储实例(便捷方法)
|
||||
|
||||
Args:
|
||||
base_path: 存储基础路径
|
||||
|
||||
Returns:
|
||||
StorageInterface: JSON存储实例
|
||||
"""
|
||||
config = StorageConfig(
|
||||
storage_type=StorageType.JSON,
|
||||
base_path=base_path
|
||||
)
|
||||
return cls.create_storage(config)
|
||||
|
||||
# 全局存储实例缓存
|
||||
_storage_instances: Dict[str, StorageInterface] = {}
|
||||
|
||||
def get_storage(storage_key: str = "default", config: StorageConfig = None) -> StorageInterface:
|
||||
"""获取存储实例(单例模式)
|
||||
|
||||
Args:
|
||||
storage_key: 存储实例键
|
||||
config: 存储配置(首次创建时需要)
|
||||
|
||||
Returns:
|
||||
StorageInterface: 存储实例
|
||||
|
||||
Raises:
|
||||
StorageException: 当配置缺失时
|
||||
"""
|
||||
if storage_key not in _storage_instances:
|
||||
if config is None:
|
||||
# 使用默认JSON存储配置
|
||||
config = StorageConfig(storage_type=StorageType.JSON)
|
||||
|
||||
_storage_instances[storage_key] = StorageFactory.create_storage(config)
|
||||
|
||||
return _storage_instances[storage_key]
|
||||
|
||||
def close_all_storages():
|
||||
"""关闭所有存储实例"""
|
||||
for storage_key, storage in _storage_instances.items():
|
||||
try:
|
||||
storage.close()
|
||||
logger.info(f"Closed storage instance: {storage_key}")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to close storage {storage_key}: {e}")
|
||||
|
||||
_storage_instances.clear()
|
||||
|
||||
# 注册未来的存储实现
|
||||
def register_database_storage():
|
||||
"""注册数据库存储(未来实现)"""
|
||||
try:
|
||||
from .database_storage import DatabaseStorage
|
||||
StorageFactory.register_storage(StorageType.DATABASE, DatabaseStorage)
|
||||
except ImportError:
|
||||
logger.debug("Database storage not available")
|
||||
|
||||
def register_mongodb_storage():
|
||||
"""注册MongoDB存储(未来实现)"""
|
||||
try:
|
||||
from .mongodb_storage import MongoDBStorage
|
||||
StorageFactory.register_storage(StorageType.MONGODB, MongoDBStorage)
|
||||
except ImportError:
|
||||
logger.debug("MongoDB storage not available")
|
||||
|
||||
def register_redis_storage():
|
||||
"""注册Redis存储(未来实现)"""
|
||||
try:
|
||||
from .redis_storage import RedisStorage
|
||||
StorageFactory.register_storage(StorageType.REDIS, RedisStorage)
|
||||
except ImportError:
|
||||
logger.debug("Redis storage not available")
|
||||
|
||||
# 自动注册可用的存储类型
|
||||
def auto_register_storages():
|
||||
"""自动注册所有可用的存储类型"""
|
||||
register_database_storage()
|
||||
register_mongodb_storage()
|
||||
register_redis_storage()
|
||||
|
||||
# 模块加载时自动注册
|
||||
auto_register_storages()
|
||||
Reference in New Issue
Block a user