主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python: GoogleAppEngineでTornadoを使ったアプリ

                
tags: python
 ちょいとサーバにのっけたいPythonスクリプトがあった。GoogleAppEngineの無料割当枠がまだまだ残っているのでそれを使うとして、フレームワークはどれで書こうか。GoogleAppEngine標準のwebapp2に加えて公式でDjangoやFlaskのデモが試せるし、Tornadoも公式でなくTornadoのほうでだがデモが配布されている、ただしTornado自慢のノンブロッキングではないが。
 半日足らずの遊びなのであんまり時間はかけたくない。Flaskはまだ使ったことないがほんの1、2時間程度で書けそうだし迷った。だがTornadoをそれなり触っているので、とりあえずそれが本当にGoogleAppEngineで動くか試したかったのでTornadoにした。

 ぼくはたいていをWindows 7でやっている。だからGoogleAppEngineに上げるPythonアプリのローカルテストもWindowsでやっている。そのローカルテストでPythonバージョンが2.7.9、GAEバージョンの1.9.17でエラーが出たので調べてみたが、ローカルテストのみで出るバグがあるらしい。"no module named _ctypes"と出力された。該当ファイルは見つけることができたのでおそらくパスの問題だろう。次のGAEリリースで修正されると見つけたので今回はいじらず放っておくことにする。
 Tornadoは最新のTornado4.1をpipでインストールし、今回作るプロジェクトディレクトリにスクリプトが入ったtornadoディレクトリをコピーした。
 それに加えて今回のメインであるサーバにのっけたい自作のPythonライブラリもプロジェクトディレクトリにコピーした。あとはこれまでのGAEアプリケーションと同様にアプリケーション名をGAEサイトで登録したりapp.yamlを作ったり。

 そしてGAEで動かすTornadoスクリプト。アップロードされたJPEGファイルからExifを辞書型データに起こし、それをJSON文字列にしてクライアントに返すもの。
import json
import logging

import tornado.web
import tornado.wsgi
import piexif


class RHandler(tornado.web.RequestHandler):
def post(self):
jpg_data = self.request.body
logging.info(jpg_data[:10])
try:
exif_dict = piexif.load(jpg_data)
except:
self.set_status(400)
return self.write("Wrong jpeg")
self.add_header("Content-Type", "application/json")
thumbnail = exif_dict.pop("thumbnail")
data_d = {}
for ifd in exif_dict:
data_d[ifd] = {piexif.TAGS[ifd][tag]["name"]:exif_dict[ifd][tag]
for tag in exif_dict[ifd]}
data_d["thumbnail"] = thumbnail
data = json.dumps(data_d, encoding="latin1")
return self.write(data)


application = tornado.web.Application([
(r"/p", RHandler),
])

application = tornado.wsgi.WSGIAdapter(application)


下記が今回の製作物を上げたもの。
http://piexif-demo.appspot.com/demo
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。