有効な値を頭の中に記憶して置かなければいけないインターフェイスはツライという話

github.com

はじめに

有効な値を頭の中に記憶して置かなければいけないインターフェイスはツライという話。 そんなわけで、kamidanaでもextensionsとadditional modulesについて組み込みのものの情報だけは表示してくれるようにしてみた。

extensions

extnesions はjinja2のextensionsそのもの。詳しくはここ。

以下の様にして使う。jinja2.ext は省略できる。

$ kamidana -e <extension name> <template>

たとえば、loop中でcontinue,breakが使える様になる拡張がある(利用例)

additional modules

こちらは、kamidanaのもの、templateが利用する関数やフィルタをその場で渡して利用できるようにする機能。

以下の様にして使う。kamidana.additionals は省略できる。

$ kamidana -a <additional module> <template>

例えば、単数形を複数形にするものがあったり、スネークケースやケバブケースやキャメルケースに変換するnamingというmoduleが組込で入っている(利用例)。

それぞれ渡せる値を調べるのが面倒

それぞれ渡せる値を調べるのが面倒だった。なので有効な値を一覧として見たいというissueはずっと作ってはいたのだけれど。包括的な方法が思いつかなかった(実装するのが面倒とも言う)ので放置していた。

考えてみると組み込みのものだけ分かればとりあえず十分なので、部分的なサポートをすることにした。

具体的には --list-info というオプションを付加して実行すると有効なものをそれぞれ表示する。フォーマットを考えるのが面倒だったのでJSONにした。

$ kamidana --list-info
extensions are used by `-e`, additional modules are used by `-a`.
{
  "extensions": {
    "jinja2.ext.i18n": "This extension adds gettext support to Jinja2.",
    "jinja2.ext.do": "Adds a `do` tag to Jinja2 that works like the print statement just",
    "jinja2.ext.loopcontrols": "Adds break and continue to the template engine.",
    "jinja2.ext.with_": "Extensions can be used to add extra functionality to the Jinja template",
    "jinja2.ext.autoescape": "Extensions can be used to add extra functionality to the Jinja template"
  },
  "additional_modules": {
    "kamidana.additionals.reader": "Reading from other resources (e.g. read_from_file, read_from_command)",
    "kamidana.additionals.naming": "Naming helpers (e.g. snakecase, kebabcase, ... pluralize, singularize)"
  }
}

ついでにちょっとした説明も加えることにした。extensionsの方はクラス自体のdocstringの1行目、additional modulesの方はそのモジュールのdocstring。

ただ一覧が出てきてもどう使えば良いかわからなくなりそうなので、stderrにちょっとした使いかたのヘルプメッセージを表示することにしてみた。

おしまい。