repoze.who

pylonsのMLによると、AuthKitは廃止の方向で進むようで。

作者もphase outするって宣言しているし、ここはひとつrepoze.whoでも覚えておこうかなと週末触ってみた。

Authentication and Authorization with repoze.whoをみながらやってみたんだけど、あちこち端折ってあるので、ちょっと簡単には動かせなかった。

というわけでまたあとで。

The Definitive Guide to Pylonsの著者とAuthKitの作者が一緒なので本はAuthKitの利用を前提で書かれていて内容が古い感があるけど、テストのとことか文書化、デプロイメントのあたりはよく書かれているので、手元にあると重宝する。

ProductName The Definitive Guide to Pylons
James Gardner
Apress / 4049円 ( 2008-12-22 )


AuthKitでSQLAlchemyを使う

pylons bookの19章を参照。

ProductName The Definitive Guide to Pylons
James Gardner
Apress / ¥ 4,506 ()
在庫あり。

from simplesite.model import meta
meta.metadata.bind = meta.engine

をいまいちきちんと理解できてない。

追記 100130

model/meta.pyをみたら

"""SQLAlchemy Metadata and Session object"""
from sqlalchemy import MetaData
from sqlalchemy.orm import scoped_session, sessionmaker

__all__ = ['Session', 'engine', 'metadata']

# SQLAlchemy database engine. Updated by model.init_model()
engine = None

# SQLAlchemy session manager. Updated by model.init_model()
Session = scoped_session(sessionmaker())

# Global metadata. If you have multiple databases with overlapping table
# names, you'll need a metadata for each database
metadata = MetaData()

ってなってるだけだった。

pylonsはじめました

pylonsはじめました。なかなか面白そうです。

とりあえず、getting startedflickr search tutorialはやってみた。

catalystとかJiftyとかturbogearsとか(RoRもそうだっけか?)はとりあえずプロジェクトを用意して何も考えずサーバー起動してアクセスすると小洒落た画面がでてきて、おー!ってちょっとした感動を覚えたりするんだけどpylonsの場合はそういうのなしの方向で。

ただ、エラー吐かすとなんかすごいよ。エラーから入らせるとは、、、テストファースト?

QuickWiki Tutorialに続く、、、

pylonsでQuickWIki

またwikiかよ、、、と敬遠しがちなWikiを作ろうチュートリアルだけど、フレームワーク自体はじめてのヒト向けには素直に書かないといけないし、幾つかのフレームワークを渡り歩いたヒトにも新たな発見とか他のフレームワークとの違いを見せるようなサンプルにしないといけないので、意外と構成を考えるのが難しいですな。

そういった意味ではpylonsでwikiを作ろうチュートリアルはdeleteの実装がajaxでのドラッグドロップになってて、しかも簡単に実装できる!っていう喜びが得られてナイスな感じ。

  • modelまわり
  • 他のパッケージの依存や自動インストールのやり方
  • ルーティングの方法
  • Ajax関連

ルーティング周りをちょっとよく理解していないのと、Ajaxがあっさり書けすぎてて何をやっているのかわからなかったので、あとでpylonsでなんか作ってみよう。

Elixirをさわってみた

SQLAlchemyにかぶせてActiveRecordとして扱えるらしいElixirを試してみた。チュートリアルを一通り。

面白かったのは継承っぽくかけるとこ。こんな感じでかける。

from elixir import *

metadata.bind = "sqlite:///test.db"
#metadata.bind.echo = True

class Artist(Entity):
    using_options(inheritance='multi')
    name = Field(Unicode(60))

    def __repr__(self):
        return '<Artist "%s">' % self.name

class Technoartist(Artist):
    using_options(inheritance='multi')

    def __repr__(self):
        return '<TechnoArtist "%s">' % self.name

class Houseartist(Artist):
    using_options(inheritance='multi')

    def __repr__(self):
        return '<HouseArtist "%s">' % self.name

class Dnbartist(Artist):
    using_options(inheritance='multi')

    def __repr__(self):
        return '<Drum\'n\'BassArtist "%s">' % self.name

if __name__ == "__main__":
    from model import *
    setup_all()
    create_all()

    technasia = Technoartist(name=u"Technasia")
    louievega = Houseartist(name=u"Louie Vega")
    joeclaussell = Houseartist(name=u"Joe Claussell")
    nutone = Dnbartist(name=u"Nu Tone")
    omnitrio = Dnbartist(name=u"OmniTrio")

    session.flush()

    print "Artist.query.all()"
    print Artist.query.all()
    print "\nDnbartist.query.all()"
    print Dnbartist.query.all()

Artistを探すと、サブクラスにあたるTechnoArtist,HouseArtist,Drum'n'BassArtistが探索される

Artist.query.all()
[<TechnoArtist "Technasia">, <HouseArtist "Louie Vega">, 
<HouseArtist "Joe Claus sell">, <Drum'n'BassArtist "Nu Tone">, 
<Drum'n'BassArtist "OmniTrio">]

Dnbartist.query.all()
[<Drum'n'BassArtist "Nu Tone">, <Drum'n'BassArtist "OmniTrio">]

チュートリアルによると、この先はSQLAlchemyのドキュメント読むのがいいんじゃねーかなと書いてあったので、読んでみる。

あと、このチュートリアルだけだとusing_optionsとかが分からないのでAPI Referenceも読むべしな感じ。

pylonsはモデルだけいじりたいときにはどうすんの?

TurboGearsだとこんな感じでいけるじゃないですか?

pylonsはちょっとよく分からなくて結局

sqlite3 -separator , test.db ".import makeinu.csv test_table"

とやってしまった(なんじゃそりゃ)。

pylonsにはpaster shell

pylonsで対話的にモデルを操作したい場合にはdevelopment.iniのあるディレクトリで

paster shell

とすればよいらしい。modelっていう変数に色々入っているので

session = model.Session
mol = model.Mol
for m in session.query(mol).filter(mol.MW > 199):
    print m

などとやるべしナ感じ。

pylonsのroutes.py

pylonsのRoutesがドキュメントみてもいまいちわからんとか思ってたんだけど、RoRのドキュメント読んだらさっくりと理解できそうな気がしてきたところで、routing.pyをいろいろいじってみたらなんとなく理解した感じ。

makoでutf-8を埋め込みたいとき

先頭行にcoding: utf-8と書いておけばいい。

そうしないとこんなエラーが出る。

CompileException: Could not read template using encoding of 'ascii'. Did you forget a magic encoding comment? in file

最初わからなかったけれど、あーそういうことねというメッセージだった。

SimpleSite Tutorial Part 3 (Pylons)

もう、自分でなんか作ったときにちゃんと読めばいいやって気分になってしまったので流し読み。

ProductName The Definitive Guide to Pylons
James Gardner
Apress / ¥ 4,522 ()
在庫あり。

Chapter 19

  • AuthKitの使い方
  • Permission毎にテンプレートを変える
  • Errorドキュメントをいじる
  • YUI Rich Text Editorを使う
  • Eggのビルド

ここまで読めばあとはなんかつくるだけ。というか作りたい物は決まっていて、文献管理システムをPylonsで書き直すのだ