Google App Engine/Python関連のメモ

  • RESTfull API

    Kay-FrameworkにRESTfullインターフェース自動生成用モジュールが追加された

Google App Engine関連のメモ

5月25日(日本時間だと26日未明)に起きた障害についての事後検証
http://groups.google.co.jp/group/google-app-engine-japan/browse_thread/thread/974615f3e72c91e

App Engine メンテナンス が行われます
http://groups.google.co.jp/group/google-app-engine-japan/browse_thread/thread/2a7c9eb8a8c5c70a

Google App Engineでモデルを保存するときに値を変更する

Google App Engineでモデルを保存するときに値を変更する | 山本隆の開発日誌」より。

結論を先に書くと、モデルのput()を次のようにオーバーライドすることで、保存時に値を変更することができた。

なお、サンプルコードはKay-Frameworkを使用している。

myapp/models.py

from google.appengine.ext import db
class MyModel(db.Model):
name = db.StringProperty()

def put(self):
self.name = u'foo'
return db.Model.put(self)

当初、フックを使って値を変更しようと思い、次のようなコードを書いた。

settings.py

USE_DB_HOOK = True #追加

myapp/__init__.py

from kay.utils.db_hook import register_pre_save_hook
from myapp.models import MyModel

def my_pre_save(entity, put_type_id):
entity.name = u'foo'

register_pre_save_hook(my_pre_save, MyModel)

保存時にフックの関数は呼ばれ、モデルの値を変更している。

しかし、保存された値をみると、変更が反映されていない。

フックで書き換えた値は保存されないようだ。

そこで、モデルのput()をオーバーライドすることにした。

from google.appengine.ext import db
class MyModel(db.Model):
name = db.StringProperty()

def put(self):
self.name = u'foo'
return db.Model.put(self)

この方法で、変更した値が保存された。

Override get and put methods to enforce business logic」には、保存時にUserPropertyに現在のユーザーを登録するコードがある。

Google App Engine用フレームワーク Kay でログを出力する

Google App Engine用フレームワーク Kay でログを出力する | 山本隆の開発日誌」より。



GoogleAppEngine用フレームワークKayでログを出力する方法を紹介します。

ログを出力するには logging をインポートします。

import logging

ログレベルには「debug(デバッグ)」、「info(情報)」、「warning(警告)」、「error(エラー)」、「critical(致命的)」)などがあります。

ログを出力するには、ログレベルに応じたメソッドを使用します。

logging.error("error")
logging.warning("warning")
logging.info("info")
logging.debug("debug")

myapp/views.py

import logging

def index(request):
logging.debug("debug")

開発サーバを起動したコマンドプロンプトに、ログが出力されます。

python manage.py runserver

DEBUG 2010-05-25 22:30:03,812 views.py:22] debug

ブラウザでアクセスするときは、URLの末尾に「?debug」をつけると、ログを表示するウィンドウが表示されます。

例:http://localhost:8080/?debug

参考

Google App Engine用フレームワークKayでfeed配信する方法

Google App Engine用フレームワークKayでfeed配信する方法 | 山本隆の開発日誌」より。

GoogleAppEngine用フレームワークKayでfeed配信する方法を紹介します。

Kayでfeed配信を行うには、werkzeug.contrib.atom.AtomFeedを使用します。

werkzeug.contrib.atom.AtomFeedの詳しい使い方は「Werkzeug Documentation」をご覧ください。

Kayでfeed配信を行う例

myapp/urls.py

view_groups = [
ViewGroup(
Rule('/', endpoint='index', view='myapp.views.index'),
Rule('/feed', endpoint='feed', view='myapp.views.feed'),
)
]

myapp/views.py

from werkzeug.contrib.atom import AtomFeed
import datetime

def feed(request):
feed = AtomFeed(title=u'山本隆の開発日誌',
feed_url=request.url,
url=request.host_url,
subtitle=u'自作のソフトウェアやプログラミング全般についての話題')
feed.add(title=u'Kay 0.10.0 RC1でユニットテストを行う方法',
content=u'Google App Engine用フレームワーク Kay のバージョン 0.10.0 RC1が公開されています。[...]',
content_type='html',
author=u'山本隆',
url='http://www.gesource.jp/weblog/?p=3419,',
id='http://www.gesource.jp/weblog/?p=3419',
updated=datetime.datetime(2010, 5, 25, 0, 9),
published=datetime.datetime(2010, 5, 25, 0, 9, 0)
)
feed.add(title=u'precompileでGoogle App Engineのspin upが約2.5倍速くなる',
content=u'precompileでGoogle App Engineのspin upが約2.5倍速くなるようです。[...]',
content_type='html',
author=u'山本隆',
url='http://www.gesource.jp/weblog/?p=3414,',
id='http://www.gesource.jp/weblog/?p=3414',
updated=datetime.datetime(2010, 5, 24, 15, 6),
published=datetime.datetime(2010, 5, 24, 15, 6, 0)
)
return feed.get_response()