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 のライブラリリファレンスのしょぼさは泣ける.