修改部分字段含义,维护缓存

This commit is contained in:
UnCLAS-Prommer
2026-02-18 16:00:45 +08:00
parent 545e3b4982
commit c9f72f7f2f
7 changed files with 506 additions and 66 deletions

View File

@@ -1,7 +1,6 @@
from abc import ABC, abstractmethod
from dataclasses import is_dataclass
from typing import Any, Dict, Self, TypeVar, Generic, TYPE_CHECKING
from typing import Self, TypeVar, Generic, TYPE_CHECKING
import copy
@@ -16,20 +15,6 @@ class BaseDataModel:
return copy.deepcopy(self)
def transform_class_to_dict(obj: Any) -> Dict[str, Any]:
if obj is None:
return {}
if is_dataclass(obj):
return obj.__dict__
if hasattr(obj, "dict"):
return obj.dict()
if hasattr(obj, "model_dump"):
return obj.model_dump()
if hasattr(obj, "__dict__"):
return obj.__dict__
return {"value": obj}
class BaseDatabaseDataModel(ABC, Generic[T]):
@classmethod
@abstractmethod

View File

@@ -33,9 +33,8 @@ class BaseImageDataModel(BaseDatabaseDataModel[Images]):
self.file_hash: str = None # type: ignore
self.image_bytes: Optional[bytes] = image_bytes
self.image_format: str = "" # 图片格式
self.is_deleted: bool = False # 是否已被标记为删除
def read_image_bytes(self, path: Path) -> bytes:
"""
@@ -89,7 +88,6 @@ class BaseImageDataModel(BaseDatabaseDataModel[Images]):
Returns:
return (bool): 如果成功计算哈希值和格式则返回True否则返回False
"""
try:
# 计算哈希值
logger.debug(f"[初始化] 计算 {self.file_name} 的哈希值...")
@@ -109,7 +107,9 @@ class BaseImageDataModel(BaseDatabaseDataModel[Images]):
# 比对文件扩展名和实际格式
file_ext = self.file_name.split(".")[-1].lower()
if file_ext != self.image_format:
logger.warning(f"[初始化] {self.file_name} 文件扩展名与实际格式不符: ext`{file_ext}`!=`{self.image_format}`")
logger.warning(
f"[初始化] {self.file_name} 文件扩展名与实际格式不符: ext`{file_ext}`!=`{self.image_format}`"
)
# 重命名文件以匹配实际格式
new_file_name = ".".join(self.file_name.split(".")[:-1] + [self.image_format])
new_full_path = self.dir_path / new_file_name
@@ -120,7 +120,6 @@ class BaseImageDataModel(BaseDatabaseDataModel[Images]):
except Exception as e:
logger.error(f"[初始化] 初始化图片时发生错误: {e}")
logger.error(traceback.format_exc())
self.is_deleted = True
return False
@@ -136,6 +135,19 @@ class MaiEmoji(BaseImageDataModel):
@classmethod
def from_db_instance(cls, db_record: Images):
"""从数据库记录创建 MaiEmoji 对象,如果记录标记为文件不存在则**抛出异常**
调用者应该对数据库记录进行检查,如果 `no_file_flag` 为 True 则不应该调用此方法
Args:
db_record (Images): 数据库中的图片记录
Returns:
return (MaiEmoji): 包含图片信息的 MaiEmoji 对象
Raises:
ValueError: 如果数据库记录标记为文件不存在则抛出该异常
"""
if db_record.no_file_flag:
raise ValueError(f"数据库记录 {db_record.image_hash} 标记为文件不存在,无法创建 MaiEmoji 对象")
obj = cls(db_record.full_path)
obj.file_hash = db_record.image_hash
obj.description = db_record.description
@@ -168,6 +180,19 @@ class MaiImage(BaseImageDataModel):
@classmethod
def from_db_instance(cls, db_record: Images):
"""从数据库记录创建 MaiImage 对象,如果记录标记为文件不存在则**抛出异常**
调用者应该对数据库记录进行检查,如果 `no_file_flag` 为 True 则不应该调用此方法
Args:
db_record (Images): 数据库中的图片记录
Returns:
return (MaiImage): 包含图片信息的 MaiImage 对象
Raises:
ValueError: 如果数据库记录标记为文件不存在则抛出该异常
"""
if db_record.no_file_flag:
raise ValueError(f"数据库记录 {db_record.image_hash} 标记为文件不存在,无法创建 MaiImage 对象")
obj = cls(db_record.full_path)
obj.file_hash = db_record.image_hash
obj.full_path = Path(db_record.full_path)