xDroid's Blog

「日历记事本」python 版

之前搞 「日历记事本」规划 的时候被 rust 整到死去活来,人生苦短,我用 python

反正这次就是什么技术新我们就搞什么哈!新特性、新 idea 通通整上。

一些思路

Python 环境和单元测试

  • 环境创建 mamba env create -f env.yml
    • 后来想起来还得在服务器上也整个 micromamba
  • 单元测试框架用的是 pytest,正在学习
    • tips:用 monkeypatch 可以改变测试时的 cwd,让命令行的 pytest 和 pycharm 和谐相处(很纠结要不要用这个特性)
  • requests 库似乎移除了 async 特性,反正我们这小破程序也不需要 async,那就同步凑合一下吧
  • python 没有像 rust 那样的 typed enum,有时候写起来有点别扭;不过 rust 的 dyn box 来 mut 去的不是更恶心?
  • json 的 binding 靠 xsdata 完成了(xs?)
  • 爬虫还是一样难搞,好在现在有能用的 debugger 了(鄙视 rust 一秒钟),解析 HTML 用了 BeautifulSoup 这个库
  • 又遇到时区问题了……pytz 也未能避免设坑,参见 这个帖子。解决方法是用 ZoneInfo 代替 pytz.timezone。

自动部署

我记得之前好像搞过 webhookd,所以这次就直接拿出来用了。这样的话 Github Webhook 会把 repo 上的改动 event trigger 到服务器上,然后就能自动 pull 了。

  • Github 设置页面里 content-type 要选 application/json,不然我想了半天也没搞清楚为啥 script 没有传入的 $1 参数。
  • micromamba 还是没法完全自动化,看来包的安装升级还是要手动搞了,这点 npm 完胜

Google Calendar API

有个比较蛋疼的事情是 python 版的 api library 只能用链接的方式验证,所以很难自动化。后来想了个办法,先本地验证完之后再 scp 给远端服务器(但还是有如果 token 挂了,那么整个 debug 信息都出不来的问题……)