web2py

Filed in Genshi | Python Leave a comment

http://www.web2py.com/
WSGI準拠のフレームワークだって。
Windows版は落っことしてきて起動したら、そのままもうページ丸々出来てた。
なんだこれすごいな。教育用に作られたそうですが、GAE対応とかいけてるポイントがわんさかあるぽ。例によって日本語の情報がないのがなんですが、訳しながらいじってみる予定。
資料の量はさらに減るけどGenshiともちゃんとくっつく(そりゃWSGIなんだからそうだわな)みたい。
web.pyの新しいのかなんかなんだと思ってたらまったくの別物でした。

エラー画面

Filed in Genshi | Pylons | Python Leave a comment

致命的な例外とかエラーとかで処理が中断されたときに、エラー画面へ遷移しますよね。
で、Pylonsだとこのエラー画面(?)でのスタックトレース表示がすんごいらしく、そのへんずいぶん期待していたわけです。

結果、どんなインタラクティブでハイパーハッピーな開発生活に邁進できているかというと、
できていないんだこれが。
apacheに吐き出されるログ(スタックトレースも当然ある)を毎度眺めながらため息をついているわけです。makoだけの機能なのかしら。
Genshiは設定にもよりますがxml/xhtmlできちんと書かれていないと即エラー行きなんで、タグの閉じ忘れなんぞした日には即エラー。
なんかあのすんごい画面([Pylons]Pylonsのトレースバックは凄い!)はどうしたらいいの。いきなりGenshi選んだあたしが馬鹿なの;;

logger周りに関しても、どうもあたしは何か決定的な知識の欠如があるみたいで、ドキュメントを眺めても手の付け所が分からない。
まいった。いやまいってる。
Pylons+Genshiで探すと、日本語環境でブログの記事で何か残していて云々、っていうのがうちくらいしか見当たらない。英語当たるしかないよねー。手を止めてその時間を確保するのか、えいやで進めちゃうのか、いまだになやみながらエイヤエイヤとプログラム書いてます。

ついき:
んー?
Pylonsでmod_wsgiを使ったときにLoggingが働かないこれかな?

Pylons+Genshi+FillingParser

Filed in FormEncode | Genshi | Pylons Leave a comment

Fillできたー!

以下、自分だけわかればいい的なぐりがき。
下記のソースで、当該ページのフォームにname=”wa”とでもしておけば、そこにwawawaと出るわけでござる。

#ちょとかきなおした。
コントローラに

        defaults={'wa':"wawawa"}
        return render('base.html', defaults= defaults)

こっちはbase.pyあたりでいいかも。render_genshiをwrapするふりして一部書き換えてるだけ。
dist-packagesの中を書き換えるのはかなりアレなので、アプリの中で書いています。

#Wrap render_genshi
def render_genshi(template_name, extra_vars=None, cache_key=None,
                  cache_type=None, cache_expire=None, method='xhtml',defaults=None):
    """Render a template with Genshi

    Accepts the cache options ``cache_key``, ``cache_type``, and
    ``cache_expire`` in addition to method which are passed to Genshi's
    render function.

    """
    # Create a render callable for the cache function
    def render_template():
        # Pull in extra vars if needed
        globs = extra_vars or {}

        # Second, get the globals
        globs.update(pylons_globals())

        # Grab a template reference
        template = globs['app_globals'].genshi_loader.load(template_name)

        #parserがある場合はFillする
        if parser == None:
            return literal(template.generate(**globs).render(method=method,
                                                             encoding=None))
        else:
            parser = FillingParser(defaults)
            src = literal(template.generate(**globs).render(method=method,
                                                             encoding=None))

            parser.feed(src)
            parser.close()
            return parser.text()
#        ここは元のコード
#        return literal(template.generate(**globs).render(method=method,
#                                                         encoding=None))

    return cached_template(template_name, render_template, cache_key=cache_key,
                           cache_type=cache_type, cache_expire=cache_expire,
                           ns_options=('method'), method=method)

Pylons+Genshi+FormEncode(?)でフォームに値をFillしたい。

Filed in FormEncode | Genshi Leave a comment

http://snipplr.com/view/10049/full-formencode–htmlfill-example-with-form-and-test-values/

この分かりやすい例は、完全に働くFormEncode(v1.2)の例をテストして、見せびらかします。 私が、例を見つけるのに苦労したので、現在、それを差し上げます。

のようなことがかいてある。これか?
というかValidatorつかってFillすんのかー?
もはや値をfillできるならどんな手段だってかまわぬ。正しい方法が見つかったら、そこで直せばいいのだし。

追記:
これ普通のバリデーションだった。さっくりrender周辺でfillするにはどうしたらいいのだ。

情報が見つからない。

Filed in FormEncode | Genshi Leave a comment

FormEncodeのFillerについて調べようとしたら、

おねーさんブログが引っかかりました。つまりこれ。
おいwwwwwwwwwwwwwwwwwwwwここ参考にならないことしか書いてないwwwwww
調べものがすすまないよう。

Genshiで改行をbrタグにする

Filed in Genshi | Python Leave a comment

ぱっと見ではみつからない気がする。
改行を<br />タグに変換してくれる何か(aka nl2br)。
改行コミの文字列データをGenshiにそのまま渡すと、なんもしてくれないのね。で、じゃー父さんbrタグに変換しちゃうぞーっていうとこれもダメ。エスケープされちゃってどうしようもないの。

で、悩んで悩んであげくいつものところに聞きにいきますと、

<py:for each="line in message.split('\n')">
${line}<br />
</py:for>

なるほど。美しい。改行でばらして回してbrを加えるのねん。

さっくり答えでました。そうそうこういう状態をどうにかしたいってことだったのよ。
piquadratたんありがとー。

モデルの中身をテンプレ出力

Filed in Database | Genshi | Pylons | Python Leave a comment

波浪ノ
おねーさんです。

やっと、やーっと、
Pylons入れてWSGI経由で起動してDBに繋がせて値とってテンプレートに食わせて吐き出す、という一連までたどり着けました。長かった。他のジャンルだったらあきらめてたわコレ。

アプリケーションとしてはなーンも出来上がってません。
たぶんphp+MySQL+Smartyっていういつものトリオでやってたら、今頃ブレビュー版くらいは公開できてたんじゃなかろか。ユーザの都合より自分の趣味を取りました。

いちおうまとめ。
__table_name__指定だけだとカラムは勝手に読み込んでくれなかった(気がする)。

class mstArea(Base):
    __tablename__ = 'mst_area'
    name    = Column('name')
    delflg  = Column('delflg')

こうじゃないとダメだった。うまいやり方あるんだろうけども、いったん先に進んでしまいたいのでココはこういうことだとしてひと段落させよう。
DBの基本データをさくさく放り込んで、やっとこアプリケーション作成に移ろう。
でも今日は寝る。

StackOverFlowに質問してみr

Filed in Genshi | Pylons | Python Leave a comment

日本語で情報がないので困り果てて、StackOverFlowに質問を投げてみた。
5分するかしないかで回答があって、名前見たらAlex Martelliって。
おい。ええ本物ですか。こんなとこで大物に出くわすとかありえない。どきどきしてきた!

簡単に言うと、Python界隈じゃ世界的な大家の一人です。クックブックとか書いてる人。宇宙くらいにやばい。

これは何が何でもなげださないで解決しないといけません 。やばい。

ソース整理進む

Filed in Genshi | NDI | Python | web.py | XML Leave a comment

GETとPOSTをかかえる各アクションを外に切り出す。
urlsではaction.index.indexみたいなかんじで動作を決めていく。

genshiのTemplateLoaderでごにょごにょしている出力周りの箇所は、
・一律utf8でよい
・一律 xhtmlでよい
という理由で切り出し。 これであちこちにgenshiインポートを書かずにすんだ。

サンプルコードは簡単に例を示すため、きちんと分解しようとするとややこしいね。

TOP