LoginSignup
2
1

More than 5 years have passed since last update.

bottle 0.11 -> 0.12の罠

Posted at

Bottle.pyを0.11から0.12にあげたところ罠にはまったので備忘録。

互換性ェ・・・

0.12系も成熟しただろうと今更に更新かけたら見事に爆死した。

simpleTemplateで1行ifが使えなくなってる

くっそハマって死んだところ。
SimpleTemplateの挙動が非常にマトモになったらしく、それ自体は喜ばしいのだれど、曖昧だったところ定義を厳密にしてくれたらしく、1行if / 1行forが使えなくなっている
if/forには必ず対になるendが必要。

% for item in items:
%   if item['hoge']==1: hoge+=1
% end

みたいなことをやっていたのが、全部ダメになった。。。

たしかに

% hoge = len(x for x in items if x['hoge']==1)

で済むとはいえ、ついループの数減らしたくなるじゃん?の結果がこの様。

% for item in items:
%   if item['hoge']==1: continue
% end

これとかも多用してたので、直すのがとても手間。

なにが鬱陶しいって、アクセスしに行くとテンプレートの文法エラーで500出るというのが。アクセスしてみないとわからない。。。

あと

% if hoge is None: hoge = "default-hoge"

をどう書き換えるかも悩みどころで

% if hoge is None:
%   hoge = "default-hoge"
% end

は冗長だし、かと言って

% hoge = "default-hoge" if hoge is None else hoge

も イマイチ読みづらく、困った。

response.filesの中身が独自クラスに

0.11時代はcgi.FieldStorageだったのに、0.12ではFileUploadという自前クラスに。

http://bottlepy.org/docs/0.11/api.html#bottle.BaseRequest.files
http://bottlepy.org/docs/0.12/api.html#bottle.BaseRequest.files

fileは変わらずFile-like objectなので良いけれど
valueがなくなってらっしゃるので、len(value)で大きさとってたのが死んでた。
新しくcontent_lengthが追加されたので、これを信じればいいーのかなぁ?

saveなる謎メソッドが追加されているのは、気持ち悪いのだけれど、もしかしなくとも速かったりするのかもしれない?

なにもSafeじゃないSafe Filename

いまどきにASCIIで255文字までしか受け入れなれないサーバとか滅べ!

上でも触れたresponse.filesの中身、今までのようにfilenameを呼ぶとありがたいことに去勢されたゴミを返してくれるようになった模様。
BASE64エンコードされるとかそういうのじゃなく、単純に正規表現でASCII以外はばっさりカットされるっていうな。

Safe Filename: The .filename attribute contains a normalized version of the client side file name to ensure maximum file system compatibility (lowercase, no whitespace, no path separators, no unsafe characters, ASCII only).

なにがSafeじゃ。馬鹿か。
日本語ファイル名が拡張子だけになってたぞ

「あいう.txt」
 ↓ ASCII以外を削除
「.txt」
 ↓ 不可視ファイルはダメ
「txt」

simpleTemplateのincludeとかその辺

クソコードを悔い改めてくれた
処理系がまともになった模様。
0.11では 0.10までのキーワードから関数に文法変更したのに、パーサがガバガバで新文法が使い物にならなかったのがマシになったっぽい?

よくなったところ

  • redirectするとhookが引っかからないとかいう残念バグが解消
  • postの引数の数制限が消滅

これだけで更新する価値はあるんだが、だが、移行がこんな辛いとは、、、

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1