誰でも触れる、かつ、誰でもパラメータ変更できる、けど保存はしないでほしいJupyter(a.k.a IPython) Notebookサーバー作りたいことってあるじゃないですか。
例えば、社内のMySQLサーバーとかHadoop環境とかのクエリを叩けるようなJupyter Notebookを作ったとき。 誰でもクエリの内容は変えられていいけど、それが保存されると、他の人が叩くときに困る。 こんな感じ↓
configを変更する
Jupyterの場合は「~/.jupyter/jupyter_notebook_config.py」の設定ファイルに、次のような設定を加えます。
import notebook from tornado import web class FreezeFileContentsManager(notebook.services.contents.filemanager.FileContentsManager): def save(self, model, path=''): raise web.HTTPError(400, "You cannot save notebook on this server.") c.NotebookApp.contents_manager_class = FreezeFileContentsManager
FreezeFileContentsManagerというふうにファイルマネージャーを自分で定義することによって、処理を乗っ取ることができます。 この場合は、saveの処理を上書きしています。
元になっているFileContentsManagerのコードはこちら。他にもいろいろoverrideすれば、処理を変えられそうです。
アウトプット変更とかだけだったら、 pre_save_hook
を変更するのが良いかと思います。(参考)