Releases: LiteSuggarDEV/nonebot_plugin_value
Releases · LiteSuggarDEV/nonebot_plugin_value
V1.0.0
nonebot-plugin-value v1.0.0 正式版发行说明
里程碑版本发布 | 全面架构重构 | 生产级稳定就绪
本次发布是项目从0.x开发阶段到1.0正式版的重大里程碑,完成了核心架构的深度重构,解决了所有已知的稳定性和一致性问题,大幅提升了并发性能和可维护性,正式进入生产就绪阶段。
🚨 破坏性变更
1. 异常体系重命名(必须修改)
- 将原内部
BaseException重命名为BasicException,彻底解决与Python内置BaseException的命名冲突 - 所有自定义业务异常(
CancelAction、DataUpdate)现在统一继承自BasicException - 升级指南:全局替换
from nonebot_plugin_value.hook.exception import BaseException为from nonebot_plugin_value.hook.exception import BasicException
2. 数据库会话管理重构
- 完全移除Repository层内部的
async with session上下文管理 - 改为由Service层统一管理会话生命周期,原生支持外部传入会话和事务嵌套
- 所有公共API现在都接受可选的
session参数,便于在同一个事务中执行多个原子操作
3. API返回值标准化
- 移除所有无意义的冗余
-> None返回值声明 batch_add_balance和batch_del_balance现在统一返回list[ActionResult],严格保证与输入顺序一一对应- 所有失败操作都会返回包含详细错误信息的
ActionResult对象
✨ 核心改进
1. 批量操作性能飞跃
- 使用
asyncio.gather并行执行批量余额操作,100个账户的批量操作性能提升10倍以上 - 正确处理所有异常情况,单个操作失败不会影响其他操作
- 新增
return_all_on_fail参数,控制失败时是否返回所有操作的结果
2. 事务一致性全面修复
- 统一将事务边界上移至Service层和API层,仓储层完全不处理
commit/rollback - 所有写操作后都会显式执行
session.commit(),彻底解决数据不持久化的问题 - 支持外部事务的自动提交和回滚,保证跨API操作的原子性
3. 代码质量与可维护性提升
- 统一使用
model_validate(from_attributes=True)进行ORM到DTO的转换 - 移除了所有手动字段映射,减少了90%的样板代码
- 修复了所有类型错误,通过了严格的pyright静态检查
- 统一了代码风格和文档字符串格式,提升了代码可读性
4. 钩子系统全面优化
- 使用
asyncio.gather并发执行多个钩子,大幅提升响应速度 - 完善了异常传播逻辑,
CancelAction和DataUpdate可以正常终止交易流程 - 增加了钩子名称的枚举值校验,防止注册无效钩子
🧪 测试与CI/CD
1. 全面的测试覆盖
- 重构并扩展了完整的测试体系,新增10+个测试文件
- 覆盖了所有核心API:账户、货币、交易、钩子、数据导出导入、依赖注入
- 测试用例从原来的5个增加到50+个,覆盖了所有边界条件和异常场景
2. 代码覆盖率统计
- 集成
pytest-cov代码覆盖率工具 - 配置了完整的覆盖率报告,支持终端、XML和HTML格式输出
- 新增
run_test.sh脚本,一键重置数据库并运行完整测试套件
3. CI/CD流程优化
- PR流程现在会自动运行所有测试并生成覆盖率报告和JUnit测试报告
- 主CI流程简化为仅执行代码检查和构建,提升合并速度
- 更新了
.gitignore,添加了测试结果和覆盖率文件
📝 其他改进
- 更新README,添加项目定位:"为 NoneBot2 设计的娱乐系统基础设施。"
- 统一了所有文档字符串的术语和格式
- 升级了所有依赖到最新稳定版本
- 修复了缓存不一致的问题,统一使用
expire_cache替代update_cache - 修复了
asyncio.gather异常处理的经典bug,现在正确捕获所有BaseException子类
🚀 升级建议
本次发布包含大量破坏性变更和重要修复,强烈建议所有用户立即升级。
- 本次发布没有数据库结构变更,不需要运行数据库迁移命令
- 请按照上述破坏性变更说明修改您的代码
- 升级后建议运行完整的测试套件确保所有功能正常工作
📊 版本统计
- 变更文件:28个
- 新增代码:约2000行
- 删除代码:约1500行
- 测试覆盖率:>85%
🤝 贡献者
感谢 @JohnRichard4096 完成了本次1.0版本的全部重构工作!
🔗 相关链接
- 重构会话与Hook管理,扩展API测试并开启覆盖率CI by @JohnRichard4096 in #88
如果您在使用过程中遇到任何问题,请提交Issue,我们会尽快处理。
Full Changelog: 0.1.7...1.0.0
V0.1.7
主要特性
1. 新增 LRU 缓存系统
- 添加了
_cache.py模块实现应用层缓存 - 支持三种缓存类型:货币、账户、交易记录
- 使用 LRU(最近最少使用)淘汰策略管理缓存
2. 缓存配置
- 新增配置项
VALUE_PRE_BUILD_CACHE控制是否在启动时预构建缓存 - 添加
config.py配置文件
3. API 优化
-
账户 API (
api_balance.py):- 修改多个函数的返回值,从返回完整数据改为
None - 添加缓存更新逻辑
- 支持缓存命中查询
- 修改多个函数的返回值,从返回完整数据改为
-
货币 API (
api_currency.py):- 为
get_currency和list_currencies添加缓存支持 - 优化缓存更新机制
- 为
4. 执行器重构
- 移除了
AccountExecutor中的本地数据映射 - 改为使用全局缓存系统
5. 模型和上下文优化
- 将钩子上下文从 Pydantic 模型改为 dataclass
- 修复代码风格问题
6. 版本更新
- 从
0.1.6升级到0.1.7
技术细节
缓存设计
class CacheCategoryEnum(str, enum.Enum):
CURRENCY = "currency"
ACCOUNT = "account"
TRANSACTION = "transaction"缓存管理
- 使用
CacheManager单例管理所有缓存 - 支持按类别设置不同缓存大小
- 提供缓存失效机制
性能改进
- 减少数据库查询次数
- 通过预构建缓存提升启动后首次请求速度
- 智能缓存更新和失效
这个更新显著提升了插件的性能,特别是在高频访问场景下,通过减少数据库查询来提供更快的响应速度。
What's Changed
- 更新 currency.py by @JohnRichard4096 in #82
- Convert hook context models to dataclasses by @JohnRichard4096 in #84
- 添加数据库缓存。 by @JohnRichard4096 in #85
Full Changelog: 0.1.6...0.1.7
V0.1.6.post1
V0.1.6
What's Changed
- Refactor repository, add currency query by kwargs, account freeze by @JohnRichard4096 in #80
Full Changelog: 0.1.5...0.1.6
V0.1.5
What's Changed
- 移除迁移文件import by @JohnRichard4096 in #75
- 添加依赖注入单元测试,规范化代码。 by @JohnRichard4096 in #77
Full Changelog: 0.1.4...0.1.5
V0.1.4.post1
V0.1.4
What's Changed
- Fix model by @JohnRichard4096 in #67
- fix: 修复 DetachedInstanceError by @JohnRichard4096 in #69
- Revert "fix: 修复 DetachedInstanceError" by @JohnRichard4096 in #70
- Fix detached by @JohnRichard4096 in #71
- 更新依赖,更新细节设计, by @JohnRichard4096 in #73
Full Changelog: 0.1.3...0.1.4
V0.1.3.post2
What's Changed
- fix: 修复 DetachedInstanceError by @JohnRichard4096 in #69
- Revert "fix: 修复 DetachedInstanceError" by @JohnRichard4096 in #70
- Fix detached by @JohnRichard4096 in #71
Full Changelog: 0.1.3.post1...0.1.3.post2