名前が良くない話(--input-format,output-format)

github.com

--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

--addtionalsextension は複数渡せるのだけれど。そのことが説明にはないかも。

追記

--input-format--stdin に、 --output-format--format にすると良いかもしれない? ただ、jinja2-cli--format はoutputのformatじゃなくてdataのformatなので全く別もの。