pythongithub.commonogusaのweb周りを更新した。大きな変更は前回からweb側のコードも生成されるようになったこと。前回の記事では「仮にこのように書けるとしたら...」という形でweb側のコードは手書きでの解説になったがそこは生成されるようになった。以下の様な関数定義を持つcommands.pyがある。実行する(この辺りのCLIのインターフェイスは後々変わることがありそう。experimentalなので)。すると以下の様なweb.pyが生成される。$HOME/venvs/my/individual-sandbox/daily/20191225/example_monogusa/01web/web.py生成されるコードについては後に触れるが、これは概ね前回の記事で説明に使った記事と同様のもの。サーバーが立ち上がる。リクエストすると、元の関数がふつうに呼ばれる。コマンド実行を模したものなのでstdout,stderrをresponseとして返す。]}生成されるコードは以下の通り。基本的にfastAPIに依存している。appやmainは生成せずにrouter部分だけ生成するようにしても良いかもしれない。bodyとして扱われてrequestから渡されることを期待している。コマンドの実行を公開するという行為に絞ったわりきりなのでRESTだからどうとか考えることは辞めた。キーワード引数が無い以下の様な関数などは以下の様に出力される。s.dict()同様にPOSTでアクセスできるがbodyは不要。argumentsは引数名と同名の関数で提供されるコンポーネントへの依存として扱われる。依存は実行時に解決される。これはfastAPIのDIの機能の上に乗るように調整されたコードが返ってくる。以下の様なコードを用意する。helloはdbにdbはdatabase_urlに依存している。{self.database_url!r}")これは以下の様なコードが生成される(必要な部分だけを抜粋)。使い、依存がfastAPI上で定義されて欲しいものは別途関数を生成している。fastAPIは非同期の依存も許容するのでmonogusaの方も非同期の依存を許容するように後で書き換えたい。]}エラーが発生した場合エラーが発生した場合はスタックトレースがそのままstderrの中に格納されたresponseが返ってくる。CLI上での実行を模した動作を目指していたため。このあたりは本番環境で有効になっているとセキュリティ的に不安のある動作ではあるけれど、そもそも内部の閉じられた環境での一時的な機能提供をユースケースにあげていたので。print("NEVER")実行してみる。statusは200のまま。responseに含まれるstatus_codeは0ではなく1になっている。docとの兼ね合いかもしれない。500のときのresponseの形状が複数になるというのがだるいかもしれないという話も含んでいるので)web.pyの位置を変える今までの例は提供元の関数を定義しているcommands.pyと同一の階層上にweb.pyを出力していたが、別の場所に出力することも可能。その場合はmagicalimportというパッケージを経由してimportされるようなコードが生成される。オプションで出力先を指定する。/tmp/web.py以下の様な差分が出る。cwd=True)同一階層以外は全て絶対パスを埋め込んだコードを生成するような割り切った実装。この辺は柔軟に指定できるようにするか、いっそのこと出力先を固定するための設定ファイルを用意するべきかということは決めあぐねている。まとめ変更点は以下web.pyのコードを生成できるようにしたDIも気にするようにしたエラーのときにはstderrにスタックトレースが入るどこにでも出力できる。最後にmonogusa.webの方でコード生成するようにしたが、その過程で頑張ってしまったのでCLI側でも生成するようにしても良いかもしれない。ui的には統一的に扱えるようにしたほうが良い気はしている。オプションを用意するか、またはデフォルトは/tmp的なディレクトリに生成してしまって常にevalするかというところが悩みどころ。今回はwebだけの更新になってしまったが、元々の提供範囲としてはcliとwebだけに限ったものではない。コードのrefineなどはゆっくりやれることではあるので、どういう機能を作るかの試行錯誤にも時間を振った方が良い気がしている。現在の形状では、例えばstderrに出力されるロガーの出力がstdout上でどの位置に表示されたかという情報が喪われてしまう。そのためresponseの形状は変更するかもしれない。ここ直接リンクを貼りたい。monogusaというパッケージを作りはじめた。pycommentというライブラリを作くりました。kamidanaのreadmeの生成にkamidanaを使うことにした...2017-02-191ファイルのアプリでview_configを使う。誰も特をしないpyramidの話。componentという機能を追加した月別アーカイブはてなブログをはじめよう!podhmoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。