C#からJupyter APIにアクセスできるライブラリ作った
みなとです。
Jupyterは便利なのですが唯一ファイル転送機能について言えばこれはおまけのおもちゃみたいな完成度で、ディレクトリごとアップロードできなかったり複数の大容量ファイルのアップロードに難があったりそもそも操作性が煩わしかったりでUIからがっつりFTPする枠組みが未だに整っていません。
まぁそんなものに頼らずとも大体のケースではSFTPでゴリ押し転送ができる環境にあるかと思うのでそこまでFTPクライアントにこだわらなくても問題ないといえばないのですが、何らかの政治的な理由で開発者からのSSH接続が許可されていないようなケースでは最悪「Jupyterにファイルを転送するためだけのツール」を作らなければならないケースが出てきます。というか私は出てきました。
とりあえずWPF辺りでちゃちゃっとREST投げるFileZillaっぽいUIのアプリケーションを作ろうと思ったのですが、割とこの機能需要ありそうだなと思ってまずはdll化することにしました。
で、いい感じにできたのでパッケージングしてNuGetで公開しました。何のひねりもありませんが「JupyterSharp」という名前です。
インストール手順
Visual Studioをお使いの方はお馴染み「NuGetパッケージマネージャー」からインストールするとよいと思います。
それ以外の方はコマンドラインからになるのでしょうかね。
PM> Install-Package JupyterSharp
使い方
GitHubとNuGetのREADMEにも書いてありますがせっかくなので日本語で簡単に使い方を説明したいと思います。
Jupyterへのアクセス情報はコンストラクタで渡します。アクセストークン、IPアドレス、ポート番号の3つです。JupyterHubのようなログイン認証を要する環境には現在対応していません。
var MyAPI= new JupyterSharp.Api("ACCESS_TOKEN", "localhost", "8888");
その後のRESTの切り方に関してはJupyter Notebook APIにほぼ準拠した形で呼び出せます。
例えばファイルを新規作成して名前を変更して(Jupyter APIでは任意の名前付きファイルを新規作成できません)削除するという一連の流れはこんな感じで書けます。蛇足ですがjson⇔オブジェクトの変換器も一緒に付けてますw
// 下記のインポートが必要
using JupyterSharp;
using JupyterSharp.Common;
// ファイル生成
var createRequest = MyAPI.CreateContent();
var createResponse = JsonConverter.ToObject<Common.Contents>(createRequest.Content);
// ファイル名変更
var renameRequest = MyAPI.RenameContent(string.Format("/{0}", createResponse.name), "RenameContentOK");
var renameResponse = JsonConverter.ToObject<Common.Contents>(renameRequest.Content);
// ファイル削除
var deleteRequest = MyAPI.DeleteContent(string.Format("/{0}", renameResponse.name));
どうでしょう。まだ出したばかりなので不具合・改善要望などありましたらドシドシお願いします。