CLI設計
Enchan1207 opened this issue · comments
正直 pip_init
とは別パッケージにしてもいい と思う
むしろそのほうがやりやすいまであるんじゃないかな
ちょっと枠だけ作ってみた これいけそうだな
必要な引数は…
- テンプレートの名前か場所 とりあえずテンプレートを特定するのに十分な情報
- 展開先のパス
だけか (あとは引数ハンドラがやってくれる)
ふと思ったんですが、ArgsHandler
ってpip_init_cli
にいたほうが嬉しくないですか?
バリデータとかはpip_initには関係ないし…
でも、そうなるとそれに追従する Loader
とか Serializer
も一所に移動しなきゃいけなくなる?
ただ結局 pip_init.Config
をどうするかにしか関与してない(テストコードでは色々使ってるけど)から
そのふたつもcliサイドのクラス…ってことになるのかな
(pip_initのメイン処理でjsonに直す作業は本来必要ないもんね)
よし ちょっと Loader
と Serializer
と ArgsHandler
を移そう
移行しますた 特段新しい機能追加したわけじゃないけどimportの互換性切ったのでバージョン上げてます
make cleanup
をちょっとだけ賢くした
ファイル名が揃ってなかったので修正
あとはオプションじゃーい
暫定案
pip_init /path/to/extract [--name=name_of_template] [--template_dir=/path/to/additional/template]
使用例
pip_init .
展開先ディレクトリを引数の最初に持ってきたのは、テンプレート名が指定されなかった時に自動で default
を選択させるため
いっそこれすら省略可能にして pip_init
だけ打てばなんとかなるようにしてもいいかもしれない
nargs="?"
なんてのが存在するのか…!!
そうか、テンプレートディレクトリのパスを解決するとこからか
こりゃめんどくさいな
ちょっと待って 引数ハンドラのパスいらなくない?
テンプレートそのものをPythonモジュールで管理するとするなら、必ず__init__.py
がロードされるはずだよね?
その中で引数ハンドラを何かしらの形でロードしてもらえればそれでいいのでは
問題はどの引数ハンドラを使うかという点.
args_handler
じゃなくてargs_handler_name
みたいにして、引数ハンドラに __handler_name__
みたいな属性をつけて
それに合致するハンドラを呼び出す…とか?
いやでもそれただ冗長なだけだよな せっかくロードしてるんだしそのまま使えばいいじゃんって話で
pythonのSetが順番保持するなら「最後に継承されたハンドラ」でいいかと思ったけどどうやらそうでもなさそう…
んーとりあえず__handler_name__
だな
Config
の方にも手いれなきゃいけないのめんどくさいね…(
パスはしっかりPath
で渡すように変更
~/.pip_init/
が空気になってますね…
インポート処理が複数回行われるのか これは
よし 流れとしては完成したと言っていいんじゃなかろうか!
あとはArgsHandler.default
を作り込むだけだ