GAE で pyFPDF を使うと IOError が発生する

2017年5月22日 20:34

念のため断っておくが、今回取り上げた pyFPDF は Google App Engine(GAE)に特化したライブラリではないため、GAE 以外の Python 環境においてはツイート中にある IOError は(基本的に)発生しないはずである。また、ライブラリ自身に手を加える行為も、本来あまり勧められるものではないことも付け加えておく。

ちなみに、パッケージ内の fpdf.py にある FPDF クラスで、件の IOError を発生させていたのは、add_font() 関数と _putTTfontwidths() 関数の2箇所。

if unifilename:
    try:
        with open(unifilename, "wb") as fh:
            pickle.dump(font_dict, fh)
    except IOError:
        if not exception().errno == errno.EACCES:
            raise  # Not a permission error.
if cid == 128 and cw127fname and not os.path.exists(cw127fname):
    try:
        with open(cw127fname, "wb") as fh:
            font_dict = {}
            font_dict['rangeid'] = rangeid
            font_dict['prevcid'] = prevcid
            font_dict['prevwidth'] = prevwidth
            font_dict['interval'] = interval
            font_dict['range_interval'] = range_interval
            font_dict['range'] = range_
            pickle.dump(font_dict, fh)
    except IOError:
        if not exception().errno == errno.EACCES:
            raise  # Not a permission error.

今回は EACCES の部分を EROFS に変更し、ひとまずの解決に至った。