汎用的な設定ファイルの設計
目的
カスタム設定、カスタムコードをなるべく減らすための設定ファイルの設計。
具体的には、
プログラムの実行のときに、意味的に「藤沢図書館で、借りている本と予約本を」とパラメータを書くだけで、必要な情報がとってこれるようにする。この藤沢図書館の部分を、神奈川県立図書館に変更するだけで、プログラムが同じ動きをしてくれるようにする。図書館のよる違いはできるだけ設定情報で吸収して、プログラム部分は簡単にするのが目標。実行環境は、jupyter です。
実装のコンセプト
プログラム
XXX(名詞(noun)) で、YYY(動詞(verb))する。設定ファイルの最初の階層
名詞(noun)、動詞(verb)、共通(common) 全体(global)
(例)鎌倉図書館で、借りた本を調べる。
ds.do("鎌倉図書館","借りた本")
設定ファイルの構造(json から Yamlにしました。)
トップレベル
{"nouns":{},"verbs":{},"commons":{},"global":{}}
nouns 以下 名詞 ( noun )
"nouns": {"鎌倉図書館":{項目(items)},
"藤沢図書館":{項目(items)}
- "鎌倉図書館" が名詞(noun) で、{}には、項目(items)が設定されています。
実際の例
"鎌倉図書館": {
"auth": {
"form": {
"name": "usercheck"
},
"id": {
"name": "usercardno"
},
"logout": {
"js": "OPWUSERLOGOUT(1)"
},
"password": {
"name": "userpasswd"
},
"submit": {
"name": "Login"
},
"url": "https://lib.city.kamakura.kanagawa.jp/opw/OPW/OPWUSERCONF.CSP"
},
"id": "idxxx",
"lend": {
"url": "https://lib.city.kamakura.kanagawa.jp/opw/OPW/OPWUSERINFO.CSP#ContentLend"
},
"password": "passxxx",
"reserve": {
"url": "https://lib.city.kamakura.kanagawa.jp/opw/OPW/OPWUSERINFO.CSP#ContentRsv"
}
}
verbs 以下 動詞 ( verb )
- 実行するプログラム(関数)の順番と、項目を記述します。
- 名詞( noun ) にない項目があると補完します。
"verbs": {
"test": {"common":"test"},
"借りた本": {
"do": [
"login",
"get_url,lend,url",
"sleep,5",
"get_url,reserve,url",
"sleep,5",
"logout"
]
}
}
do の構造
- do は、リストで、実行する関数名を指定する。
- 関数は、リストの順番に実行される
- do の要素は、カンマ区切りの文字列で、関数名,引数,...の構造になっている。
- (例) 関数 get_url の引数として、[lend,url]が渡される。
- sleep,5 も同様に、5 が渡され、5秒間、実行が停止される。
- do は、名詞(noun) に記述することもできる。そのときは、名詞(noun)にかかれた do が優先する
common の適用
- 項目(items)の中に、common があったら適用する。上記の事例では、動詞(verb) test にある。 "common":"test"
- 名詞(noun),動詞(verb)のあとで、適用される。
global の適用
- 何も設定しなくて良いです。
- 名詞(noun),動詞(verb),commons の後で適用。