fix: 统一存储
This commit is contained in:
199
python_core/storage/base.py
Normal file
199
python_core/storage/base.py
Normal file
@@ -0,0 +1,199 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
存储接口基类
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Any, List, Dict, Optional
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
|
||||
class StorageType(Enum):
|
||||
"""存储类型"""
|
||||
JSON = "json"
|
||||
DATABASE = "database"
|
||||
MONGODB = "mongodb"
|
||||
REDIS = "redis"
|
||||
|
||||
@dataclass
|
||||
class StorageConfig:
|
||||
"""存储配置"""
|
||||
storage_type: StorageType
|
||||
connection_string: Optional[str] = None
|
||||
base_path: Optional[str] = None
|
||||
database_name: Optional[str] = None
|
||||
table_prefix: Optional[str] = None
|
||||
|
||||
# JSON存储配置
|
||||
json_indent: int = 2
|
||||
json_ensure_ascii: bool = False
|
||||
|
||||
# 数据库配置
|
||||
pool_size: int = 10
|
||||
max_overflow: int = 20
|
||||
|
||||
# MongoDB配置
|
||||
collection_prefix: str = ""
|
||||
|
||||
# Redis配置
|
||||
redis_db: int = 0
|
||||
redis_expire: Optional[int] = None
|
||||
|
||||
class StorageInterface(ABC):
|
||||
"""存储接口基类"""
|
||||
|
||||
def __init__(self, config: StorageConfig):
|
||||
self.config = config
|
||||
|
||||
@abstractmethod
|
||||
def save(self, collection: str, key: str, data: Any) -> bool:
|
||||
"""保存数据
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
key: 数据键
|
||||
data: 要保存的数据
|
||||
|
||||
Returns:
|
||||
bool: 保存是否成功
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def load(self, collection: str, key: str) -> Any:
|
||||
"""加载数据
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
key: 数据键
|
||||
|
||||
Returns:
|
||||
Any: 加载的数据,不存在时返回None
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def delete(self, collection: str, key: str) -> bool:
|
||||
"""删除数据
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
key: 数据键
|
||||
|
||||
Returns:
|
||||
bool: 删除是否成功
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def exists(self, collection: str, key: str) -> bool:
|
||||
"""检查数据是否存在
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
key: 数据键
|
||||
|
||||
Returns:
|
||||
bool: 数据是否存在
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def list_keys(self, collection: str, pattern: str = "*") -> List[str]:
|
||||
"""列出所有键
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
pattern: 键的模式匹配
|
||||
|
||||
Returns:
|
||||
List[str]: 键列表
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def save_batch(self, collection: str, data: Dict[str, Any]) -> bool:
|
||||
"""批量保存数据
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
data: 键值对数据
|
||||
|
||||
Returns:
|
||||
bool: 保存是否成功
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def load_batch(self, collection: str, keys: List[str]) -> Dict[str, Any]:
|
||||
"""批量加载数据
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
keys: 键列表
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: 键值对数据
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def clear_collection(self, collection: str) -> bool:
|
||||
"""清空集合
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
|
||||
Returns:
|
||||
bool: 清空是否成功
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_collections(self) -> List[str]:
|
||||
"""获取所有集合名称
|
||||
|
||||
Returns:
|
||||
List[str]: 集合名称列表
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_stats(self, collection: str) -> Dict[str, Any]:
|
||||
"""获取集合统计信息
|
||||
|
||||
Args:
|
||||
collection: 集合/表名
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: 统计信息
|
||||
"""
|
||||
pass
|
||||
|
||||
def close(self):
|
||||
"""关闭存储连接"""
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
"""上下文管理器入口"""
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
"""上下文管理器出口"""
|
||||
self.close()
|
||||
|
||||
class StorageException(Exception):
|
||||
"""存储异常基类"""
|
||||
pass
|
||||
|
||||
class StorageConnectionError(StorageException):
|
||||
"""存储连接错误"""
|
||||
pass
|
||||
|
||||
class StorageOperationError(StorageException):
|
||||
"""存储操作错误"""
|
||||
pass
|
||||
|
||||
class StorageNotFoundError(StorageException):
|
||||
"""存储数据未找到错误"""
|
||||
pass
|
||||
Reference in New Issue
Block a user