Hasty Briefsbeta

双语

Rewriting a 20-year-old Python library

5 days ago
  • #Akismet
  • #Software Rewrite
  • #Python
  • 作者于2015年接手了Akismet Python库的维护工作,原创建者Michael Foord因故无法继续维护。
  • 2017年,该库进行了首次重写以实现Python 2和3的兼容,简化了配置,并用requests库替换了标准HTTP栈。
  • 2024年开始了一次重大重写,以支持async/await,并通过枚举类型暴露Akismet API的三态垃圾检测(正常、垃圾、明显垃圾)。
  • 新设计包含了独立的SyncClient和AsyncClient类,分别处理同步和异步操作,结构清晰。
  • 通过替代构造函数(validated_client)和上下文管理器处理凭据验证,确保在异步环境中验证API密钥时不会阻塞。
  • 重写中将requests库替换为httpx,它支持同步和异步HTTP请求,并允许传入自定义的HTTP客户端。
  • 测试改进包括使用httpx的MockTransport的TestSyncClient和TestAsyncClient子类,避免真实HTTP请求,以及一个便于集成的pytest插件。
  • 添加了类型提示以改善文档和类型检查,并将项目结构重组为多个文件,包含私有模块。
  • 采用了日历版本控制进行版本编号,开发工具更新为使用PDM进行打包,并用Makefile处理常见任务。
  • 最终版本(25.10.0)移除了旧的Akismet类,标志着重写的完成,对用户只有最小的破坏性更改。