TurboGears Ultimate DVD
The TurboGears Ultimate DVD is a data DVD from Kevin Dangoor, the founder of the TurboGears project. My idea was to put together a DVD that offers some of the feel of pair programming with me.
ダウンロードできるWikiチュートリアルの最新版(高画質)やTurboGearsの構造説明など2時間超のムービーだとか、ドキュメント一式だとかが入っているらしい。
DVDに自分の名前を入れてくれたり、TurboGearsとかかれたToolBoxが付いてくるメニューがあったり、デスクに飾れ的なおもちゃも。6月1日まで予約キャンペーンとのこと、興味があったので注文してみました。
で、
TurboGears 1.0 has a lot of features to cover. The TurboGears Ultimate DVD is not a replacement for the book-in-progress “Rapid Web Applications with TurboGears”. The book covers the user-level APIs in detail, but does not talk about how TurboGears works on the inside.
本が出る、と。
いぜんSQLObjectへ出したレポートに返信をいただきました。
SourceForge.net: Modify: 1481912 – “CASCADE” is never enabled.
No, it is the user’s responsibility to do MyTable.dropTable(cascade=True).
あー・・・。言語仕様がちゃんと理解できていない証拠を露呈していまいました。ぬぅ。
[ref.] 外部キー付きのテーブルがdropできない。 – http://saikyoline.jp/weblog/2006/05/drop_1.html
「TurboGears 0.9a5」に含まれている「SQLObject-0.7.1dev_r1675」でのはなし。
DBは「PostgreSQL 8.1.3」。
テーブルを消そうとして
$ tg-admin sql drop
としたら
HINT: Use DROP ... CASCADE to drop the dependent objects too.
とでた。CASCADEしてくれないのかよってことでSQLObjectのソースを追って納得。
「sqlobject/postgres/pgconnection.py」の154行目あたり。
def dropTable(self, tableName, cascade=False):
if self.server_version[:3] <= "7.2":
cascade=False
self.query("DROP TABLE %s %s" % (tableName,
cascade and 'CASCADE' or ''))
決してCASCADEされることはない、と。
で、通報しました。つたない英語で。
・・・そしていまなんとなくページをリロードしたらエントリが重複した。しっかりしてくれSF.net。
ってことで、その件も通報しました。ココでよかったのかな?
DBにPostgreSQLを指定したとき(他のDBを指定したことがないので他は不明です。:-P)に、model.pyでForeignKey()を使うと、外部キー制約がつきます。
[ref.] SQLObject 0.7 – http://www.python.jp/~ymasuda/sqlobject/SQLObject.html
ここで、ふつうにクラスを並べると、クラス名でソートされた順でテーブルが作成されるらしいのですが、ソート結果により依存関係が逆転してると当然のごとくエラーが出ます。
こんな時にはmodel.pyの中でsoClassesという名前でタプルを宣言しておくと、その順番でテーブルが作成されるようなので、この問題を回避することができます。
サンプルコードを示します。(クラス名でソートするとEmployeeが先に来ることに注目。)
soClasses = (
"Group",
"Employee"
)
class Group(SQLObject):
name = StringCol()
class Employee(SQLObject):
firstName = StringCol()
lastName = StringCol()
group = ForeignKey("Group")
柴田さんとおおたにさんに感謝。
[ref.] PostgreSQLとTGの安定性はどうなんでしょう?
JSON出力のためにパラメータで「tg_format=json」を渡すと
TypeError: pagelist() got an unexpected keyword argument 'tg_format'
みたいなのが出てしまう件でのハマりからやっと脱出。
#740 (tg_format parameter causing problems with JSON requests) – TurboGears – Trac
にバグとして報告されてました。対象メソッドに処理が渡る前にメインのコントローラの中でtg_formatパラメータを除外するはずが、できていなかったみたいです。なんかおかしな日本語ですがそんな感じ。
ちなみに0.9a5ではFIXされています。
待てないので修正個所
[1113] – TurboGears – Trac
を見て自分で反映しました。
だいぶ時間を使いましたが構造がまた少し理解できた気がするのでよしとします。つかれた。
[ref.] 黙々とTurboGears。 – http://saikyoline.jp/weblog/2006/04/turbogears.html
The 20 Minute Wikiをゴニョゴニョしながら進める。
しっかし1.0に向けてバージョンがガシガシと上がっているせいか、ドキュメントとチュートリアルと実物がバラバラな個所もある。ソースを追うにもスキル不足で追い切れない。うぅむ。
チュートリアルにでてくる「turbogearsfmt=json」が「tg_format=json」に変わってるのは分かった。
でも、
TypeError: pagelist() got an unexpected keyword argument 'tg_format'
・・・寝るか。
[p.s.] 2006-04-13
見てるチュートリアルと使ってるバージョンがおもいっきり違ってました。
使ってたTGは0.9a4で、デモムービーですが、それは0.8.9っぽい。(もっと古い?)
ともあれ、ちゃんと確認しなきゃ・・・orz。
TurboGearsでポスグレを使うためのpsycopg。動かせたのでメモ。
Pythonとポスグレはインストールずみが前提。
psycopgのコンパイルに必要な「eGenix mx Extensions for Python」をダウンロードしてインストール。
実際に使われるのはこの中のmxDateTimeにあるヘッダファイルなんだけど。ともあれ、インストール。
同梱のsetup.pyで一発。楽だ。
# wget http://www.egenix.com/files/python/egenix-mx-base-2.0.6.tar.gz
# tar zxf egenix-mx-base-2.0.6.tar.gz
# cd egenix-mx-base-2.0.6
# python setup.py install
で、psycopgをダウンロードしてインストール。
最初は1系でやってみた。
# wget http://initd.org/pub/software/psycopg/psycopg-1.1.21.tar.gz
# tar zxf psycopg-1.1.21.tar.gz
# cd psycopg-1.1.21
# ./configure \
> --with-python=/usr/local/python24/bin/python \
> --with-postgres-includes=/usr/local/pgsql/include \
> --with-postgres-libraries=/usr/local/pgsql/lib \
> --with-mxdatetime-includes=/usr/local/python24/lib/python2.4/site-packages/mx/DateTime/mxDateTime
# make
# make install
検証環境(というかcoLinux)なんだし、βでいいじゃないかと2系でもやってみた。
そもそもTG自体バージョンが1.0まで達してないし。
※以下pg_configにパスが通っている必要あり。
# wget http://initd.org/pub/software/psycopg/psycopg2-2.0b8.tar.gz
# tar zxf psycopg2-2.0b8.tar.gz
# cd psycopg2-2.0b8
# python setup.py build
# python setup.py install
easy_installが入っているなら、最後の2つは
# easy_install .
でよし。
mx Extensionsといい、psycopg2といい、最近のPython関連はみんな
# make
# make install
↓
# python setup.py build
# python setup.py install
または
# easy_install .
なのかな?
[ref.] TurboGears と PostgreSQL。 – http://saikyoline.jp/weblog/2006/04/turbogears_postgresql.html
DBにポスグレを選んでハマる。
$ tg-admin sql create
Using database URI postgres:...
...
ImportError: No module named psycopg
「psycopg」ってナニ?ってことで調べると
initd.org
psycopg is a PostgreSQL database adapter for the Python programming language.
とのこと。で、インストールだってことで
$ ./configure ...
...
checking for mxDateTime.h... configure: error: can't build without mx headers
・・・今日はあきらめて寝る。
[p.s.] 2006-04-09
使えるようになりました。
[ref.] TurboGears と PostgreSQLその2。 – http://saikyoline.jp/weblog/2006/04/turbogears_postgresql_1.html
Google グループ : turbogears-ja
説明: TurboGearsに関する日本のコミュニティ発足に向けてのグループ。TurboGearsとTurboGearsに関連するプロジェクトの日本での情報交換をしたいな。
あまりにタイムリーなので決意表明。いまちょうど読んでるのをそのまま日本語にするだけだし。
あ、メンバーとしてです。ホストではなく。そのへん弱気。
TurboGears: Installation on *nix-Like Systems
Even though you don’t have Easy Install yet, you can still take advantage of it. Instead of one-command installation, it will be two-step installation. And, you’ll have Easy Install for the next update!
って言われても、
ez_setup.py -f http://www.turbogears.org/download/index.html --script-dir /usr/local/bin TurboGears
の意味が分からなくて気持ち悪くて先に進めない。
-f オプションはナニを指定してるの? –script-dir ってなにさ?
こういうことある度に思うのだが、損な性格してるかも・・・。
p.s. 投稿直後
ソッコーで自己解決。python ez_setup.py –help ってできる。ez_setup.py のソース読み始めてたよ・・・。