--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なので全く別もの。