あらためてPyramid

Filed in Pylons | Pyramid | Python Leave a comment

なんかPyConも間近なんですが今年は行かない予定。モチベーションが。

そんなアレなのも何なので、重い腰を上げて久々にPyramidやらをさわろうと一念発起。
もうなんにもおぼえてないくぽー

さしあたり昔に書き散らしたいろんなアプリ(たいていはPylons)の残骸をかき集めて、それっぽい骨組みの構築開始。
scaffoldでjinja2+alchemyとかのなんかいいのがあればいいんだが無いっぽいので、両scaffoldで生成したプロジェクトの中身を見ながら合成。手でちくちく。scaffold自分で書けるようにならないとこの馬鹿馬鹿しい作業が一生ついてまわるのな。
で、そろそろ目鼻ついてきたかなというところで困ったのがルーティング。
なんか様子が変だ。

map.connectからconfig.add_routeへ

なんかルーティングの登録も仕組みが変わってるのね。
route とビューのサンプル — The Pyramid Cookbook v0.1 (翻訳)

「3.可変のコントローラとアクション。」のあたり。

Pyramid ではルーティング変数によってビュークラスを選択することは できません。

まてw
なにさらっと重要なこと書いてんだ。どうすんのそれ。

# Pylons
map.connect(“/{controller}/{action}”)
map.connect(“/{controller/{action}/{id}”)

こういうのできないって。
えー?

一個ずつ

config.add_route(“help”, “/help/{action}”)

こう書けってことかなあ。正気とは思えんなあ。なんの不都合があってそうしたんだろう。

と思いきや

“pyramid_routehelper” は、 Pylons の map.resource のように動作する config.add_resource メソッドを提供します。

もう。
なんなの。

websetup.pyで困る

Filed in Pylons | Python Leave a comment

アプリの初期設定を投入するときに使うwebsetup.py。
paster setup-app development.iniみたいにつかうやつ。
SQLAlchemyなら困らないんですが、mongokitなんかでデータ投入しようと思うと、どーもconfig読んでくれていない気がする。
どうやると読んでくれるのかなー

(development.ini)
[app:main]
...
mongodb.host = localhost
mongodb.port = 27017
mongodb.db   = hoge

conf[‘mongodb.host’]
よべたわー
よくみたらsetup_appが
setup_app(command, conf, vars)
こうじゃんね。なんだー

pylons make url & redirect

Filed in NDI | Pylons | Python Leave a comment

from pylons import url
url(controller="main",action="hoge")
>>>'/main/hoge'

なので、

from pylons.controllers.util import redirect
redirect(url(controller="main",action="hoge"))

なわけなのね。
書いてあるimportはcontrollerをpasterで生成するときにもともと書いてある。

pathinfo="/hoge/fuga"
ret = routing.make_map(pylons.config).match(pathinfo)
redirect(url(controller=ret['controller'], action=ret['action']))

うん。

Pylons + MongoKit + i18n

Filed in MongoDB | Pylons | Python Leave a comment

多国語対応とかやってみたい。
ということで、helper.pyに

def locale(data_dict):

    """
    dbの値(mongo)において、
    ユーザが設定している言語の文字列を優先して返す
    ない場合は言語優先順に文字列を検索して返す
    """

    if type(data_dict) != dict:
        return None

    if is_login():
        lang = session.get('userinfo', None).get('lang', None)

    val = data_dict.get('lang', None)
    if val is None:
        for lang in langlist():
            val = data_dict.get(lang, None)
            if val:
                break
    return val

def langlist():
    ll = [
        'en',   # 英語
        'ja',   # 日本語
        'es',   # スペイン語
        'fr',   # フランス語
        'it',   # イタリア語
        'ru',   # ロシア語
        'nl',   # オランダ語
        'tw',   # 繁体字台湾
        'cn',   # 簡体字中国
        'kr',   # 韓国語
        ]
    return ll

こんなの書いてたんだけど、そんなのとっくにあった。ちゃんとロケール見て切り替えるんだー。そこまでやんなきゃだめだったかー。
というわけで徒労。まあいいもんみっけたしいいか。
あたしのかいたやつ危なっかしいとこ放置してたしね……。

PylonsのHelpersでconfigをつかうには?

Filed in kvs | MongoDB | Pylons | Python Leave a comment

いやわかんないんですけど。
ちょっと詰まったものの時間切れなので備忘としてメモ。

どうなんだろと思ってhelpers.pyの先頭あたりで読んでみてprint
{‘pylons.app_globals’: None, ‘pylons.request_options’: {‘e以下略

厳しいなー
SQLAlchemy経由でなんかやってたときは困らなかったけど、Mongokitだとpylons.app_globalsにおいてあるconnection呼べないと動かせない。
こういうときのお作法はどうなってるんだろう。
Noneじゃなあ。実際動かしたときにもNoneのままかどうか確かめてみよう。

結果:
呼べてた。

def conftest():

    from pylons import config
    print(config)
    connection = config['pylons.app_globals'].connection
    print(connection)

なんだー

Pylons チュートリアル

Filed in Pylons Leave a comment

ってキーワードでこのしょっぱいブログに流れ着いてる人がいる。
ごめんぽ。

どうした!なにがあった!おねーさん話しだけでも聞くよ!
いやあたしもわかんないこと多いけど、なんかつまづいてんだったらコメント頂戴。

Pylonsいいとおもうんだけどなー。なかなか流行んないね。あたしはどじゃんごよりもはるかに感触いいと思うんだけど。

u-n

Filed in MongoDB | Pylons Leave a comment

MongoKitはちょっと違う気がしてきた。
model.__init__.pyにモデルの読み込みを全部書きこむのってなんかなあ。
都度使うやつだけ読みたいんだよ。

MongoKit

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

http://pypi.python.org/pypi/mongokit/0.7.2
mongodbのツールキット。自分でmapper書かなくてよかったのか。
Pylons supportを謳っているのがポイント高い。development.iniとかのiniファイルに接続の設定書けるみたい。
ちょうどこのへんの書き方で自分のだとなんか半端だなーとおもっていたところだったのでありがたい。
さっそく使ってみる。
現時点での最終更新が2011-08-30でversion0.7.2。旬ですね。

, , ,

Leí pylons.config en model/__init__.py

Filed in Pylons | Python | SQLAlchemy Leave a comment

備忘のためのメモ。
結論から書くと読めない。ConfigParserでdevelopment.iniとかを読み込むタイミングより先にmodelの__init__.pyを見に行ってるんだろうなー
model以下に別途hoge.pyみたいにmodelファイル作って使うぶんにはだいじょうぶ。

どうでもいいけど大航海時代やめちゃったから、もうNDI開発ブログじゃないんだよね。名前変えるかな。

Pylons1.0+AuthKit websetup.py

Filed in AuthKit | Pylons | SQLAlchemy Leave a comment

Chapter 19: SimpleSite Tutorial Part 3をみながらAuthKitをセットアップしようとしていてはまっていた。
DBにテーブルが生成されないの。
んでわかったのでメモ。
もとから書いてある

Base.metadata.create_all(bind=Session.bind,checkfirst=True)

は、AuthKitのテーブルは作ってくんない。自分でcreate_allを別に呼ばないといけない。

websetup.py

from myapp import model
users = UsersFromDatabase(model)
model.meta.metadata.create_all(bind=Session.bind,checkfirst=True)

これで

paster setup-app development.ini

できた。やー長かった。解けてみると当たり前なんだけどなー。

追記。

log.info("Adding roles and uses...")

users.role_create("delete")
users.user_create("foo", password="bar")
users.user_create("admin", password="opensesame")
users.user_add_role("admin", role="delete")

このあと

Session.commit()

これがいる。

TOP