Sponsored Link


傀儡師のプログラミング日記

Pyblosxom を調べてみる (2) (2003/08/02)

とりあえず、pyblosxom をインストールしてみました。実は、まだぜんぜん分かっていません。ということで、ちょっとずつ中身を確認しながら、いじっていこうかと思います。ちなみに下記の内容は、pyblosxom 0.7beta1 を見たときにすでに書いてしまったので、今動かしているのは、pyblosxom 0.8rc1 なので若干違うかもしれません。
CGI の本体の pyblosxom.cgi を見ると、sys.path の追加などを行ったあとに、libs.pyblosxom の PyBlosxom クラスをインポートしています。そして、libs.Request クラスをインポートしていますが、これはブラウザからのリクエストを格納するためのものでしょう。そして、os と cgi に関しては、通常の Python で CGI を書く場合のお決まりのパターンでしょう。
from libs.pyblosxom import PyBlosxom
from libs.Request import Request
import os, cgi
そして、ここからが本筋にあたるところです。Request() でリクエストクラスをインスタンス化して、reg.addConfiguration(config.py) で設定ファイルを読み込んで、それをリクエストクラスのオブジェクトに反映させているようです。
req = Request()
req.addConfiguration(config.py)
そして、次に空のディクショナリを作って、変数 d に代入します。
d = {}
次に、["HTTP_HOST" ....] のリストの各要素をキーとして、os.environ.get(mem, "") で環境変数から、 それぞれの値を拾ってディクショナリに入れています。
for mem in ["HTTP_HOST", "HTTP_USER_AGENT", "HTTP_REFERER", "PATH_INFO",
    "QUERY_STRING", "REMOTE_ADDR", "REQUEST_METHOD", "REQUEST_URI", 
    "SCRIPT_NAME", "HTTP_IF_NONE_MATCH", "HTTP_IF_MODIFIED_SINCE"]:

d[mem] = os.environ.get(mem, "")
このディクショナリを req オブジェクトに addHttp メソッドを使って追加し、さらにこれに、Python の CGI では定番の cgi.FieldStorage() を、"form" というキーでディクショナリに追加しています。フォーム変数にアクセスするときには、これを使います。
req.addHttp(d)
req.addHttp({"form": cgi.FieldStorage()})
そうしたら、この req オブジェクトを引数として、PyBlosxom クラスをインスタンス化してやります。PyBlosxom がメインのオブジェクトなわけです。そして、p.startup() でたぶん、内部的に起動した状態を作り出して(初期化して)、p.run() で実際に何らかの動作を行うといったことなのでしょう。このように、pyblosxom.cgi 自体は、普通に Python で CGI を書くときのように単純なものです。
p = PyBlosxom(req)
p.startup()
p.run()
さらに Request.py を見てみると、Request クラスは、リクエストや Pyblosxom 自体の設定を格納しておくためのクラスであることが改めて確認できます。このリクエストオブジェクトを参照しながら Pyblosxom クラスが表示するための HTML を作り出すようです。def __init__ (初期化)のところを見ると、self._configuration = {}、self._http = {}、self._data = {} と単に3つの空のディクショナリを作ってやっているだけで初期化はやはり単純です。設定、HTTPリクエスト、データと3つに分けて格納する場所をつくってやります。その後ろも基本的に、このオブジェクトのプロパティに値を設定したり、取り出したりだけの単純なものです。 肝心の pyblosxom.py を見てみると、これは多少大きいのですが、それでもたったの338行。コアの部分は非常にシンプルなプログラムのようです。
Blog

TinyBlog について

傀儡師の館(楽天)

pyblosxom テスト中

自然言語処理について

人工無能について

Python について

Copyright (c) 2003, Kugutsushi