Google App Engine/Python関連のメモ
- RESTfull API
Kay-FrameworkにRESTfullインターフェース自動生成用モジュールが追加された
- 6行のコードで Yahoo! Japan のトピックス一覧を取得する Python スクリプト
Web scrapingライブラリ「Scrapemark」が便利そう
- Python用のユニットテストツールまとめ
Python用ユニットテストツールの一覧。
Google App Engine(Python)でKay-Frameworkを使い、メールを受信する
Google App Engine(Python)でKay-Frameworkを使い、メールを受信する方法を紹介します。
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 MyModeldef 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 loggingdef 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 datetimedef 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()