開発サーバでTaskQueueする際の注意点

GAE

参考: http://knightso.hateblo.jp/entry/2014/06/10/080720開発サーバ上でのtaskqueueにおいては、queue.yamlに設定したrateの設定は無視される。 たとえば5分おきに実行させたいと思って、rate: 20/h とやっても、開発サーバ上ではwaitせず連続して処理…

appengine_config.pyに、PYTHONPATHを切る

GAE

サードパーティ製のPythonライブラリを使おうと思った時、うまくimportできるものとそうでないものがある。importできない原因の1つに、ライブラリ自身が依存している他パッケージをimportする際に、そのパッケージにPYTHONPATHが通っていること前提になっ…

Modelのプロパティのデータ型が違うと、こうなる

GAE

先日、こんなトラブルがあった。 bulkloaderにて、とあるデータを取り込む。 開発コンソールの Datastore Viewer で中身を確認。ちゃんと入ってる。 自分のプログラムから、そのデータをクエリで取得すると、特定のプロパティだけ、どのレコードも常に値が N…

テスト中にてっとり早くdatastoreの中身をクリアする方法

GAE

ローカル開発サーバで開発・テスト中に、あるカインドの全エンティティを削除したい場合、ローカル開発サーバの管理コンソールの Interactive Console を使うと良い。(http://localhost:ポート番号/console) from google.appengine.ext import ndb from 場…

ゼロ埋め方法いろいろ

いつも忘れるので備忘。 数値のゼロ埋め方法。 val = 123 #推奨 "{0:0>5}".format(val) #古い方法 "%05d" % val #いったん文字列にする str(val).zfill(5) #いったん文字列にする。埋め草を指定できる str(val).rjust(5, "0")

GAEでREST的なGETを行う−URLルーティング方法2種

GAE

たとえば、検索条件に従って検索を行うhogeというページがあったとすると、検索条件をサーバ側に送信する方法には次のようなものがあるだろう。 方法1 GETメソッドで、URLにパラメータを付与する。 http://サーバアドレス/hoge?param1=xxxx&param2=yyyy&par…

コーディング スタイルガイド 抜粋

自分用に抜粋。 ファイル名は、小文字+アンスコ形式。 クラス名はPascal形式(単語の先頭を大文字、アンスコ使わない)。 グローバル変数は、小文字+アンスコ形式。 定数は、大文字+アンスコ形式。 メソッド・関数は、小文字+アンスコ形式。 ローカル変…

サーバ側のインデックス削除(プロジェクトが複数ある場合)

GAE

インデックスの削除のやり方をググると、 appcfg.py vacuum_indexes をやれ、という情報に行き当たるのであるが、渡しているパラメータについて説明がないことが多くて混乱するのでメモっておく。基本形はこうだ。 appcfg.py vacuum_indexes フォルダ名 -A …

datastoreのfilterについての注意

GAE

datastoreでfilterを行うとき、次のように、"="の前にスペースを空ける必要があるのだが、その操作によってインデックスが設定される。 datas = カインド名.all().filter("カラム名 =", "hoge")index.yaml - kind: カインド名 properties: - name: カラム名…

テンプレート内で変数に代入したい

お題:A.html、B.html の2つで、hoge.html というテンプレートを使い回している(=includeしている)として、ページタイトルをAとBで異なる物にしたい。タイトルは固定的な文字列なので、ハンドラーから渡すんじゃなく、テンプレート内で定数のように定義…

ローカル開発サーバで、-clear_datastore=yes オプションつけて起動したら、すぐにオプション外しとけっての

GAE

普段、GAE Launcher つかって、開発サーバ起動するじゃないすか。 で、データストアが消えないように、自分の好きな場所にデータストアを保存するように設定しとくじゃないすか。 そしたら、今回は全部クリアしたいなーというときには、あえて、GAE Launcher…

関数へ引数を参照渡しできない件について

言い古された話ではあるようですが、pythonは、基本的に、値渡しです。たとえば、3つぐらい配列があって、関数にその3つの配列のガワを渡して、関数の中でappendしてほしいよ、てな時どうするかというと、戻り値をタプルとして複数返せることを利用するの…

タプル げに素晴らしい

お題:YYYY/MM/DD形式の日付文字列を、年・月・日に分割する dateStr = '2014/07/31' yy, mm, dd = dateStr.split('/')なんと簡単なんだ...

ログ出力方法(開発サーバ)

GAE

import logging ... logging.debug("hoge")とやるわけだが、ログレベルは、開発サーバでは、dev_appengine.pyの起動パラメータに指定してやる。 --log_level=debugdebug/info/warning/critical/error のいずれか。なお、ググると、良く「以下をmain()に記述…

ローカル開発サーバで、マシン再起動時にDatastoreが消えるのを防ぐ

GAE

ローカル開発サーバにおけるDatastoreの保存先ファイルは、tempファイルであり、マシンを再起動すると消えてしまう。 これを防ぐには、AppLauncherにて Editメニュー⇒Application Settings を開き Extra Flags: の欄に、以下のように設定する --datastore_pa…

bulkloaderでUTF-8のファイルをアップロードするときの注意

GAE

bulkloaderでUTF-8のファイルをアップロードする際は、BOMなしにすること! BOMありにすると、ファイルの先頭のデータが認識されなくなる。 この現象を発見した経緯 (1)アップロードさせたいテストデータをExcelで作成し、CSVファイルとして保存。 (2)bulklo…

Datastore関連でよくわかってなかったこと整理

GAE

わかっているようでわかってなかったので整理。 用語 kind RDBでいうところのテーブルのこと Entity RDBでいうところのレコードのこと #テーブルのことじゃなかった! Propery RDBでいうところのカラムのこと Tips 異なるバージョン間のDatastoreは別々にな…

%Y-%m-%dT%H:%M:%S の T って何なの

GAEのbulkloaderがらみで疑問に思ったこと。bulkloader.yaml に、date型のプロパティに、 transform.import_date_time(%Y-%m-%dT%H:%M:%S) という初期値がセットされていた。この書式部分の仕様は、Python の strptime() に渡す書式と同一だそうで、 http://…

webapp2で、ソースファイルをサブフォルダに置きたい

GAE

webapp2のサンプルでは、ほとんどのファイルがアプリケーションのルートディレクトリに置かれているので、ソースコードをサブフォルダに置きたい場合のやり方がわかりにくい。ちなみに、Python2.5 + webapp だった時代は、このようにやってた。 ディレクトリ…

MacOS X 10.8 で 、PyDevインタープリタが登録できない

OS X 10.8 + Aptana でPyDevインタープリタの登録ができない。http://stackoverflow.com/questions/5595276/pydev-eclipse-python-interpreters-error-stdlib-not-foundで、原因はこれだったhttp://stackoverflow.com/questions/11702139/pydev-debugger-una…

Aptana Studio 3 に Google Plugin for Eclipse がインストールできない

Google Plugin for Eclipse を使いたい。eclipse 4.3 にはすんなり入ったが、Aptana Studio 3 に入れると依存関係エラーになってインストールできない。#ちなみに、Aptana Studio 3 は、Eclipse3.7(Indigo)がベースになっている #(と、about画面を見て判断…

Mac版 SDK on Python の dev_appengine.py の場所

GAE

Mac版のSDKをダウンロードすると、その中身は、GoogleAppEngineLauncher.app というファイルが1つしかなく、開発サーバの本体である dev_appserver.py がどこに存在しているのか、ずっとわからないままだったのだが、ようやっとその場所を発見。GoogleAppEn…

ソート順の制御

データストアに日付をキーにして格納されているデータをSELECTして、それを 日付の降順に一覧表示(TABLEタグに吐き出す) 日付の昇順にチャート表示(XMLデータに吐き出す) という2つの処理を同一ページ内でやりたい。最初は、日付の降順でのSELECTと、日付…

取得した要素(タグ)の属性にアクセスする

こんな感じのHTMLがあったとしよう。 hoge.html <html> <head> ・・・ </head> <body> 選択してください。 <select id='hoge'> <option value="#" selected>全て</option> <option value="001">区分1</option> <option value="002">区分2</option> <option value="003">区分3</option> </select> <body> </html>このHTMLから、optionタグに入っているコードと名称を取ってきたい。 名称は、タグの中…

XMLを吐き出す

GAE

GAEのデータストアに保存したデータを取得し、FusionChart(Flashベースのグラフ出力ライブラリ)でグラフ表示するというプログラムを作っている。 FusionChartは、グラフにプロットするデータを、以下のような形式のXMLで渡してやる必要がある。 XMLの一例…

おさらい−新規プロジェクト追加から公開まで−

当初、自分は、新規プロジェクト作成、コーディング、テスト(実行)まですべてAptana上で行っていたのだが、GAEの本番環境へのデプロイのことを考えると、Google App Engine Launcher を使っておかないと何かと不便だということがわかってきた。 ここであら…

GAEでmatplotlib使いたかったけど

どうも使えないようです。 C拡張モジュールが使えないためではないかと想像しているのだけど。import matplotlib.xxxx とやると、matplotlib からnumpy を使っていて、その中で multiarray を使おうとしているところで No module named multiarray となって…

ログ出力方法

GAE

java等のloggingと同じ使い方ができます。 import logging from google.appengine.ext import webapp class MainPage(webapp.RequestHandler): def get(self): logging.debug("testtest") #ここでログを出力 application = webapp.WSGIApplication( [('/',Ma…

os.path._getfullpathname()

macで作業していたら、次のコードがエラーになった。 class MainPage(webapp.RequestHandler): def get(self): #テンプレートページ(index.html)にデータを流し込みつつ表示する page_contents = { 'dateFrom': '2009/10/29', 'dateTo': '2009/10/29' } path…

外部javascriptファイルの取り込み

GAE

自作のjavascriptを、独立した.jsファイルにして、それを取り込む場合は、app.yamlにその事を書いておかないと、jsファイルがロードできない。app.yaml抜粋(アプリケーションルート/scripts というフォルダの下にjsファイルを置くという想定) handlers: - …