モジュール docutils.io¶
Docutils の入出力インターフェイスを扱うモジュール docutils.io を見ていく。ここは難しいところはないはずだ。
例によってエラー処理やら低水準処理のラッパーやらは省略する。
クラス図¶
モジュール docutils.io の全クラスを一枚の図に収めて示したいが、紙幅とレイアウトの都合上、二つのスーパークラスそれぞれに分割して図示する。また、両図ともに本節の解説の主眼にない機能の記載はグレーアウトしたり、記載そのものを省略している。
まずはクラス Input の継承グラフを表現するクラス図だ。次に示す。
次の図はクラス Output の継承グラフを表現するクラス図だ。
スーパークラスについては 基礎クラス群 を参照。
それぞれ対称的なインターフェイスを備えていることが明白。機能も対称的だ。
クラス Input¶
補助的な機能は無視して、興味のあるインターフェイスのみ記す。
データ¶
component_type一応文字列
inputが定義されているが、このクラスはComponentを継承しているわけではない。default_source_pathサブクラスでの上書き専用。入力の対象がファイルでないときに、何らかのダミー文字列を入れておく。
self.encoding入力データのエンコーディング名。普通は
"utf-8"でよいだろう。self.source入力そのもの。
self.source_path入力の対象がファイルであるときの、ファイルパス文字列。
メソッド¶
read(self)サブクラスで定義。
NullInputならば空の文字列を返す。FileInputならばファイルをopenしてreadしてdecodeして返す。StringInputならばself.sourceをdecodeして返す。DocTreeInputならばself.sourceを単に返す。
decode(self, data)引数のデータを文字列に復号する。
self.encodingが与えられている場合は、それを利用する。ない場合は発見的方法で頑張る。
サブクラス¶
サブクラスでは必要に応じてメソッドを追加する。例えば FileInput ならば
open, readlines, close 等々。それほど興味を引くものはないので省略。
クラス Output¶
こちらも補助的な機能は無視する。
データ¶
component_type一応文字列
outputが定義されているが、このクラスはComponentを継承しているわけではない。default_destination_pathサブクラスでの上書き専用。出力の対象がファイルでないときに、何らかのダミー文字列を入れておく。
self.encoding出力データのエンコーディング名。
self.destination出力先。
self.destination_path出力の対象がファイルであるときの、ファイルパス文字列。
メソッド¶
write(self, data)サブクラスで定義。
NullOutputならば何もしない。FileOutput,BinaryFileOutputならばファイル``self.destination`` にdecodeしたデータをwriteする。StringOutputならばself.destinationを文字列扱いしてencodeして返す。
encode(self, data)データを
encodeして、それを返す。
クライアント¶
何が Input と Output のサブクラスのオブジェクトを生成するのか、それらをどう用いるのかを記す。
FileInputparsers.rst.directives.Include.run:include_fileとして状況に応じてreadlines()またはread()parsers.rst.directives.Raw.run:raw_fileとしてオブジェクトを生成、read()するparser.rst.directives.CSVTable.get_csv_datacsv_fileとして生成、read()するand more
StringInputurllib.request.urlopen(source).read()の戻り値を利用する状況。
DocTreeInputcore.publish_from_doctreeにて利用。documentが既にあることが決定的。
FileOutputPublisherのデフォルトのdestination_classpublish_file系関数のデフォルトのdestination_classutils.DependencyList.set_outputで利用
StringOutputcore.publish_programmatically系関数のデフォルトのdestination_class
NullOutputも出番がある。BinaryFileOutputはpublish_cmdline_to_binaryのデフォルトのdestination_class
感想¶
ここに記さなかった補助関数
check_encodingの実装では Python 標準のモジュールcodecsを利用している。Outputのメソッドencodeでは結局strのメソッドencodeを用いるが、Inputのメソッドdecodeではstrのコンストラクターを用いる。