猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

Ryuのアプリを作る その1

  上司に「Ryuに何か新しい機能を実装してコミュニティに投稿します」と宣言してしまったために、Ryuで何か新しい機能を実装します。REST経由で設定できるDHCP機能を作成しようと思います。

 仕事でよくRyuをいじっているので、動くものを作るだけなくRyuの内部動作まで理解を深めるのが目的です。

既存のクラスの利用の仕方

 この辺りを参考にしていただくと分かりますが、Ryuのアプリは全てRyuAppのサブクラスとして定義されています。特に注意点としては、_CONTEXTです。

 _CONTEXTは、アプリケーションが利用したいコンテクストを明示するための辞書です。キーがコンテクストであり、値がそのコンテクストを実装する通常のクラスになります。そのクラスはapp_managerによりインスタンス化され、同じコンテクストを持つすべてのRyuAppのサブクラス間で共有されます。サブクラスからは __init__のkwargs を用いる事で、以下のようにしてインスタンスを参照することができます。

 Ryuのアプリのrest.pyを例にとると、すでに実装されているクラスの機能(OFSのポートやマックアドレス等を制御するnetworkの機能や、Ryuをwebアプリケーションとして利用するためのwsgiの機能)を辞書型の_CONTEXTに指定することで、利用できるようになります。