couchdb-pythonでプログラムの中からセキュリティ設定をしたい

couchdb-pythonをいじってみたりしてるんですが、標題のことをしようと思って調べてました。所詮、couchdbのインターフェイスはHTTPなので、HTTPリクエストを組み立ててサーバに投げれば出来ることは出来るんですが、せっかくできあいのライブラリがあるんだし、もっとお手軽にできないものかと思ってソースを読んでみました。

結論。

couchDBのwikiに解説されているとおり、あるデータベース(仮に’database’とする)のアクセスにユーザ名・パスワードが必要になるようにするには、http://server:5984/database/_security に

{
   "readers" : {
     "names" : ["takeshi"],
   }
}

のようなJSON文字列をPUTすれば良いのですが、db.createを使って普通のドキュメントのように ‘_id’ に ‘_security’ を設定して呼んでも、アンダースコアで始まる _id ではエラーになってしまいます。そこで、python-couchdbライブラリのUndocumentedなメソッド couchdb.client.Database.resource.put を使って設定します。

import couchdb
server = couchdb.client.Server('http://admin:passwd@server:5984/')
db = server.create('database')
db.resource.put('_security',
                {'readers' : {'names' : ['takeshi']}},
                {'Content-Type': 'application/json'})

というような感じで、couchdb.client.Databaseクラス下のメソッドで簡単にPUTリクエストをサーバに投げることができました。あ、takeshiさんのパスワードは /etc/couchdb/local.ini に書いておきます。または、Futonインターフェイスからサクッとパスワードの設定をすることもできます。