Scaffoldで先人の知恵を学ぶ

SQLAlchemy(+MongoDB)+Jinja2(Genshi)
この組み合わせはあるだろう。Github眺めたら実際あった。
あたしが当面やりたいことがRapidGizaで解決してる。
とおもいきや既にgithub死んでました。いい名前なのに。
PythonのWAF周辺のライブラリ名は結構好きです。ピラミッド、アルケミー、フラスコ、クフ、エリクサーなんてのもあったな。こういう妖しい単語大好き。
はい。

App/app/scripts/initializedb.py:

- from .models.models import (
+ from ..models.models import (

modelをmodelsディレクトリに移動してまとめたので書き換え。
そのままルートにばらまいてる人はそのままでおk
あんま小分けにしても使いづらいのかなあ。みんなディレクトリ切って小分けにしてしまっちゃいました。

models/
lib/
scripts/
tests/
web/
  templates/
  views/
  static/
    css/
    js/
    img/
__init__.py
const.py

こんな按配です。
ディレクトリの配置やconst.pyなどについては、shazow / pyramid_scaffolds_decoupledさんやグローバル定数@rm -rf /さんを参考にしました。

コレにともなってapp/__init__.pyの中がちょっと書き換わりますね。

config.add_static_view('static', 'web/static', cache_max_age=3600)

config.scan('.web.views') # views
config.scan('.lib')

Pylonsでいうところのhelperをどっかに置きたい。libを切ればいいか。
PyConJP2012で、Pyramidにはhelperない云々、WebHelperとかそういうの使ってくださいという話を聞き、にわかに情緒不安定になり、言いつつも実はPylonsっぽいhelperの使い方もします、みたいな、なんだか狐につままれたような話を聞いてきたばっかりなのであります。
h.hoge()とかしたくない?したいよねえ。

あんまり意識していなかったんですが、Pyramidっていうのはメタフレームワークなのかな。土台あるんで好きに(俺俺フレームワークを)構築してノウハウ貯めこんだりしちゃってくださいよというような。
なんかFlask意識したっぽい「1ファイルで動く代物書けちゃう!」みたいなデモはする必要ないよね。1ファイルで済むようなもの作りたければ普通Flaskとか使う。
#学習コスト云々といった理由は除く

ともあれ、構成とか落ち着いたらScaffoldの作成にも手を出してみたい。
この機能はステキだ。

Pyramidのプロジェクトをさくっと作る

自分用メモ
各位ご存知のことかと存じますが、あたしはお脳のメモリ容量、アクセス速度共に石器時代あたりの人でありますので、pyramidのセットアップ一つをするりとやっつけるのにすらあちこちで転んでおりました。
わかってみると道理の通った手順なのですが、わかるまでが遠い。「何のためにこれやってんの」「どこに書いてあるの」「これやるとどうなるの」「いつおわるの(´・ω・`)」と不安になり腕が震え膝が体を支えられなくなり冷や汗が額を流れ落ちエトセトラ。
で、もうめんどくさいからこういうのを書いとけばいいんだよ。
#batファイルとして書いてるのでバックスラッシュです一部

:: pyramidstart.bat
@echo off
IF "%1" == "" (
    echo "pyramidstart env(virtualenv) project(pyramid)"
) else (
    virtualenv %1
    cd %1
    Scripts\activate
    pcreate -t alchemy %2
    cd %2
    pip install jinja2
    pip install pyramid_jinja2
    pip install -e .
    setup.py test -q
    \Scripts\initialize_%2_db development.ini
    echo "plz type: pserve development.ini --reload"
)

jinja2は入れただけなのでじつは

pyramid.includes =
    pyramid_jinja2

こういうのを(たぶん)書き加えてあげる必要があるんですが、さしあたりざくっと「Welcome to Hoge」画面を出すには足ります。
virtualenvの環境名fooenv
pyramidのプロジェクト名Foo
のばあい

pyramidstart fooenv Foo

とやると。