名前が良くない話(--input-format,output-format)
--addtionals
というオプションの名前が良くない。という話もありつつ他にも良くない名前がある。
その筆頭は --input-format
と --output-format
。それぞれ対応しているわけではない。
--input-format
--input-format
は主に標準入力からデータを受け取る時に使われる。標準入力から渡されたデータのフォーマットを渡す。以下の様な感じ。
$ echo '{"name": "foo"}' | kamidana --input-format=json --dump-context /dev/null { "name": "foo", "template_filename": "/dev/null" }
jsonを渡しているので --input-format=json
--output-format
--output-format
は出力されるデータのフォーマット。通常はrawなのでただの文字列。
dictなどをJSONとして出力などする時に、JSONとしてvalidでないものはエラーになると便利。
そのようなことに対応するためのものでもある。
正常に出力される場合には結果が変わらない。
$ cat dict.json.j2 { "message": "{{'hello'|upper|emphasis}}" } $ kamidana --additionals a.py --additionals b.py dict.json.j2 { "message": "H E L L O" } $ kamidana --additionals a.py --additionals b.py dict.json.j2 --output-format=json { "message": "H E L L O" }
一方でinvalidなJSONを出力しようとした時には結果が変わる。
$ cat dict2.json.j2 { message: {{'hello'|upper|emphasis}} } $ kamidana --additionals a.py --additionals b.py dict2.json.j2 { message: H E L L O } $ kamidana --additionals a.py --additionals b.py dict2.json.j2 --output-format=json JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 3 (char 4) # 全部のエラーメッセージを知りたければ --debugをつける
追記
短い1文字のオプションも付けた(堕落した)。
$ kamidana -h usage: kamidana [-h] [--data DATA] [--driver DRIVER] [--loader LOADER] [-a ADDITIONALS] [-e EXTENSION] [-i INPUT_FORMAT] [-o OUTPUT_FORMAT] [--dump-context] [--debug] [--dst DST] template positional arguments: template optional arguments: -h, --help show this help message and exit --data DATA support yaml, json, toml --driver DRIVER default: kamidana.driver:Driver --loader LOADER default: kamidana.loader:TemplateLoader -a ADDITIONALS, --additionals ADDITIONALS -e EXTENSION, --extension EXTENSION -i INPUT_FORMAT, --input-format INPUT_FORMAT -o OUTPUT_FORMAT, --output-format OUTPUT_FORMAT --dump-context --debug --dst DST
--addtionals
と extension
は複数渡せるのだけれど。そのことが説明にはないかも。
追記
--input-format
を --stdin
に、 --output-format
を --format
にすると良いかもしれない?
ただ、jinja2-cliの --format
はoutputのformatじゃなくてdataのformatなので全く別もの。