monogusagithub.commonogusaというパッケージを作りはじめた。完成には至っていないのだけれど現状でできることなどを書きながらここで使用感を確認していくことにした。monogusamonogusaというのはもちろん「ものぐさ」から来ている。お布団が大好きだったりこたつから出たくないような人々のこと。その場から動きたくない、手の届く範囲に望みのものが置かれて欲しいみたいな状況が目に浮かぶ。今回はどういう感じのものを作ろうか?ということをお気持ちベースでメモに書いてみてから作ることにしてみた。考えてみると、自分は自分の書くコードに対して、ドキュメントを書くということをサボりがちであるという認識を持っている。これが以下のどれなのかと言うのがはっきりしていない。(英語でドキュメントを書くのが苦手)後者は間違いないことではあるのだけれど。自己認識の上では前者かどうかは未知数という感じ。いうわけで今回はもう少し文章や説明を多めに作ってみることにしてみている。このプロジェクトに関してはどうせ自分のためのコードなので英語でドキュメントを書く必要も無いような気がして来ている。ある状態からある状態へ手軽に遷移できて欲しいここでの状態には色々な意味がある。詳しくはメモの方を参照してみると良いかもしれない(とはいえ自分のためのメモなので読んでも意味が読み取りづらいかもしれない)。インストールができたことにして筆を進める。monogusaなので手軽になにかを行いたい。その何かは例えばコマンドとしての提供だったりする。手元で書いた関数がそのままコマンドとして提供されて欲しい。この機能だけを見るとhandofcatsと重なる部分があるのだけれど。monogusaはサブコマンドになる。以下の様な関数定義がある。{name}")これをmonogusa越しに呼ぶとコマンドになる。byeという関数がサブコマンド化されている。キーワード引数はフラグとして利用できるようになる。デフォルト値として使われる)。default値このままだとinvokeのようなタスクランナーと被るような所があるかもしれない。titleとして扱われる。以下のようにdocstringを追加した時に。usageとして表示される。defされた関数ちょっとしたおまけとしてasyncioの関数にも対応している。time.time())実行できる。debug=True>この辺りのインターフェイスは変わるかもしれない。環境変数経由の値渡しは知らなければわからないインターフェイスなのでたくさんは増やさない予定。何に使われるのかというとDI的な機能として使われる。以下の様に、引数と同名のcomponent関数を用意してあげると自動的に埋め込まれて使われる。自動的に埋め込まれて使われる。sqlite:///:memory:この辺りは以下の機能を参考にして作られていたpytestのfixtureの機能fastAPIのDIの機能1このDI的な機能は再帰的に実行される。helloはDBに依存し、DBはdatabase_urlに依存している。sqlite:///:memory:例えば以下の様なコードもOK。型ヒントは指定してあげる必要がある。DB(database_url)ただこれだけではまだ不足している気がしていて、lifecycle的なイベントが必要かもしれないと思っている。あとまだ他のfixture的な機能で用意されているgeneratorを利用したteardown付きのfixtureはサポートしてない。後々必要になるかもしれない。interfaceところでコレだけでは本当に価値があるとは思えない。それこそ単にコマンドを作れば良いだけな気がするし、タスクランナーからタスクを手元で実行すれば良いだけな気がする。monogusaというのはこたつから出たくない人種、たとえばテレビのリモコンは手の届くところにあってほしい。良き所に良きものが置かれているという空気感をここでの文脈に持ってきたい。APIとして提供できるようになっていると嬉しいかもしれない。ここでwebAPIとして提供されるとはどういうことかといえば、消費者が自分自身から他の人へ広がるということになるのかもしれない。クローズドな環境でのことをイメージして見てほしい。API的な機能が利用可能になる。この辺りはMicroBatchFrameworkの影響設けているかもしれない。今はまだ手で書かなければいけない。以下の様な感じで使える。PORT直接実行するとuvicornが動く。requestをしてみると返ってくる。コマンド実行の抽象化なのでstdoutとstderrがresponseとして返ってくる。docと相性が悪いような気がしている。UI経由でweb画面が見れる。uiここまでを自動でできれば格好良いのだけれど。この辺りは手書きする必要がある。現状は以下の様な形への変換が必要になる。DIなどはfastAPIのものを使う様に書き換えている。付きで実行してみれば良い。この辺りもfastAPIに乗っかることができればよしなにやってくれる。stringその他先のことその他先のこととして、タスクキューとの組み合わせなどを考えている。非同期タスクを良い感じに取り扱いたい。それもローカル、オンプレ、クラウド上で良い感じに動くような形で。最初はSQS辺りを使うものかもしれない。redis経由でarqをwrapしたものになるかもしれない。これらの依存が動かなくては動かせないとだるいのでおそらくインメモリーの何かしらもローカルで動かせるようにすると思う。monogusaなので。あとはbotとのつなぎ込みも手軽にできて欲しい。(民主化と言えば良いのかわからないがそういうような雰囲気の何か)。その辺りまで手軽に使える様になったら良いのかなーと思ったりしている。現在starlette自体にこの機能は無い。このあたりにはそこそこ複雑な経緯がある。pythonでも型を書きたいですよね。hintsがあり...2019-03-10標準ライブラリだけでpythonモジュールを設定ファイルとして使う方法のメモ標準ライブラリだけでpythonモジュールを設定ファイルとして使...2019-02-09pythonのformatterのblackに標準入力でコードを渡す。componentという機能を追加した月別アーカイブはてなブログをはじめよう!podhmoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。