GAE

webtest を使った Google App Engine アプリケーションのテスト

Google App Engine (以下 GAE)アプリケーションの、Web API 部分のテストを自動化するために、webtest というツールを導入してみた。webtest は WSGI アプリケーションをテストするための便利ツール。WSGI アプリケーションにダミーのリクエストを簡単に送る…

Google App Engine の Model を JSON に変換する方法

Google App Engine (以下 GAE) で結果を JSON で出力したい場合、GAE SDK に同梱されている Django の simplejson を使えばいい。ただ問題があって、simplejson で JSON にできるのは、Python の組み込み型*1だけ。Model や GqlQuery を JSON にはできない。…

Google App Engine でモジュールを動的にインポートする方法

Google App Engine(以下 GAE)でモジュールを動的にインポートするには、__import__関数を使えばいい。 # 動的にモジュールをインポートする def dynamic_import(name): mod = __import__(name, globals(), locals(), [], -1) components = name.split('.') f…

Kay Framework でログイン必須のビューを作る方法

Kay チュートリアルでも紹介されていますが、ログイン必須のビューを実装するなら、kay.auth.decorators.login_required デコレーターを使うのが手っ取り早いです。 from kay.auth.decorators import login_required @login_required def index(request): re…

はじめてのKay Framework

はじめに Google App Engine(以下 GAE) アプリの開発スピードを上げるために、Kay Framework を導入することにしました。ただ、導入に思いのほか時間がかかってしまったので、手順をメモしておきます。誰かの役に立てば幸いです。今回試した環境は次の通り。…

Google App Engine で動く RSS/Atom フィードアグリゲーターを作った

はじめに 先月ぐらいに、ふと、次のようなことを考えました。 はてなダイアリーに書いた記事へのリンクを、手動でわんくまBlogに投稿するの面倒。自動化したいよね。 ↓ Yahoo Pipes 使えばいける? ↓ ブログ投稿機能ないよ。 ↓ xFruits はどう?ブログ投稿機…

親がいるモデルをキー以外で取得するなら親指定必須

Google App Engine (以下 GAE) では、parent がいるモデルを get_by_key_name や get_by_id で取得する場合、parent を指定する必要がある。parent に指定するのは、モデルオブジェクトでもいいし、キーでもいい。これを知らなかったので、モデルを取得でき…

デスクトップに置いたプロジェクトを Google App Engine Launcher に登録するのは NG

GAE

デスクトップに置いたプロジェクトを、Google App Engine Launcher に登録しようとしたら、固まってしまったので、タスクマネージャーから強制終了。で、再び起動しようとしたら次のようなエラーが出て、起動できなくなった。 See the logfile 'C:\Google\go…

Google App Engine で集約例外ハンドラ

Google App Engine の webapp.RequestHandler には、ハンドラ内で例外が発生したときに呼び出される handle_exception メソッドがあります。このメソッド、デフォルトでは HTTP ステータスコードを 500 に設定するだけですが、これをオーバーライドして、動…

urlfetchの制限時間は5秒

Google App Engine では、外部のWebサービスのAPIを呼び出したり、RSSを取得したりするために、urlfetch というモジュールが提供されています。この urlfetch モジュールの fetch 関数を使って、URLのドキュメントを取得できます。ただ、fetch 関数のデフォ…

Google App Engine で RSS を生成する方法

Google App Engine 用のアプリケーションで RSS を生成したいなら、Django に入っている feedgenerator を使えばいい。feedgenerator は Django に入っているユーティリティモジュール。Google App Engine SDK for Python には最初から Django が入っている…

Google App Engine/Python で単体テスト

Google App Engine SDK for Python には、単体テスト用に各サービスのスタブが提供されています。このスタブと unittest を使えば、ローカル環境で GAE 用アプリの単体テストが可能です。GAE/Python で unittest を使って、単体テストを行うサンプルは次の通…

参考になりそうなオープンソースのGAEアプリ

GAE

GAE アプリを開発しているけど、Python と GAE の両方とも初心者なので、どう実装したらいいのか迷う。そこで、「オープンソースのGAE向けアプリを参考にすればいいじゃないか」と考え、ネットで探してみた。 kay-framework - A web framework made specific…

GAE/JRuby がすごく速くなっている件

Ruby で Google App Engine 用アプリを開発できる「appengine-jruby」っていう gem があるんですが、これを久しぶりに更新したら、すごく速くなっていて驚きました!何が速くなったかっていうと、初回ロードがすごく速くなっています。以前は表示されるまで…

ログインが必要なメソッドを実装するための Google App Engine アプリ用デコレータ

Google App Engine アプリを作っていると、「ログインしていないときはログインページにリダイレクトする」コードをよく書きます。 class MainHandler(webapp.RequestHandler): def get(self): # ログインしていないときは、ログインページにリダイレクト if…

GAE アプリのテンプレートを DRY

Google App Engine のテンプレートでも、Django のみたいにテンプレートを継承できます。テンプレートの継承を使えば、サイトで共通に使われている全ての要素をまとめることが可能です。まず、ベースとなるレイアウトを記述します。 base.html <html> <head> <title>{% block ti</title></head></html>…

GAE で DataMapper を使う準備

Google App Engine(以下 GAE) で DataMapper を使用可能にする、dm-appengine というプロバイダがあります。この dm-appengine の導入でハマってしまったので、今後のために導入手順をメモしておきます。まず、 appcfg.rb.bat gem install data_mapperで Dat…

google appengine の gem でインストールされる appcfg のバグ?

Windows XP で、日本語で名付けたアカウントにログインし、下記のコマンドを実行。 appcfg.rb.bat gem install インストールするgem名すると、「Document and Settings 下にフォルダがない」といった内容のエラーが発生する。肝心のフォルダ名は文字化けして…

予算ジェネレーターのソースコードを公開

GitHub に予算ジェネレーターのソースコードを公開しました。 404 · GitHub GitHub と Google Code のどちらで公開するか迷いましたが、自分のプロジェクトが dashboard に一覧表示される点と、Git を採用している点、この2点で GitHub に決定。Source のペ…

Google App Engine で動く Web サービス「予算ジェネレーター」

Google App Engine と Python の入門として、超単純な Web サービスを作ってみました。 予算ジェネレーター スクリーンショットはこちら。 月収を入力してボタンを押すと、予算を計算して表示します。各費目の適正割合は、「年収200万円からの貯金生活宣言」…