「日历记事本」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 信息都出不来的问题……)