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’を指定するのが、互換性からは、良さそうである。