Python3.8になり、bottleのset_cookieでエラーが出るようになった
エラーの内容
File "/home/someone/someapp/venv/lib/python3.8/site-packages/bottle.py", line 1626, in set_cookie
value = touni(cookie_encode( (name, value), secret) )
File "/home/someone/someapp/venv/lib/python3.8/site-packages/bottle.py", line 2600, in cookie_encode
sig = base64.b64encode(hmac.new(tob(key), msg).digest())
File "/usr/lib/python3.8/hmac.py", line 146, in new
return HMAC(key, msg, digestmod)
File "/usr/lib/python3.8/hmac.py", line 49, in __init__
raise ValueError('`digestmod` is required.')
Python3.7.5
hmac.new(key, msg=None, digestmod=None)
Python3.8
hmac.new(key, msg=None, digestmod='')
この差だろうか?
bottle.py(ver 0.12.17)に修正を加えてみる。
修正したのは、ひとまず、以下の2行。
digestmodに、何が使えるのか、よくわからないが、sha1を指定してみる。
2600行目(cookie_encode関数内)
sig = base64.b64encode(hmac.new(tob(key), msg, 'sha1').digest())
2609行目(cookie_decode関数内)
sig = base64.b64encode(hmac.new(tob(key), msg, 'sha1').digest())
こうすることで、とりあえず、エラーで止まることは、なくなった。
bottleが、python3.8に対応するまで、待てる環境であれば、待つのがよかろう。
追記(2019/11/23):
https://docs.python.org/ja/3/library/hmac.html
ドキュメントに、「MD5が、digestmodの暗黙のデフォルトだったのを廃止した。」
とあるので、’MD5’を指定するのが、互換性からは、良さそうである。