pulldom の外部エンティティ参照の無効化

pulldom で cobertura の吐く xml を処理していたら

urllib2.URLError:

というエラーが. 何でかと思ったら

<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-03.dtd">

の部分で DTD の URL を読みに行っているのが原因のよう. マニュアルを読んでも、対策が分からなかったのでライブラリのソースを読んで直感で

p = pulldom.parse(sys.argv[1])
p.parser.external_entity_ref = lambda context, base, sysid, pubid: 1

と書いて対処. 正しいかどうかは分からないが動いた. XML 周りの Python のライブラリリファレンスのしょぼさは泣ける.