fix: 统一存储

This commit is contained in:
root
2025-07-12 10:20:05 +08:00
parent d74ae45416
commit 6157976b85
9 changed files with 2026 additions and 8 deletions

View 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()