ローカル環境のDatastore Viewerでエラー
Kayで試しに作っていて、Datastore Viewerで日本語のリストを含むKindを見ようとすると、
A server error occurred. Please contact the administrator.
という状態になってしまった。
ログを見ると、
ImportError: No module named _multiprocessing
ということでモジュールがないらしい。
調べたら、 Issue 1504: No module named _multiprocessingという、まんまのページがあった。
アプリのルートに_multiprocessing.pyを作って、
import multiprocessing
と書いたらこのエラーは出なくなった。が、
Traceback (most recent call last): File "/home/hakuja/Dev/gae/google_appengine/google/appengine/ext/webapp/__init__.py", line 507, in __call__ handler.get(*groups) File "/home/hakuja/Dev/gae/google_appengine/google/appengine/ext/admin/__init__.py", line 672, in get value = data_type.format(raw_value) File "/home/hakuja/Dev/gae/google_appengine/google/appengine/ext/admin/__init__.py", line 1020, in format writer.writerow(value) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
orz
該当コードを見てみると、csv出力でエラーになっている模様。
また調べてこのページを参考に、
--- orig/google_appengine/google/appengine/ext/admin/__init__.py 2009-12-15 08:22:19.000000000 +0900 +++ google_appengine/google/appengine/ext/admin/__init__.py 2010-01-12 16:17:33.000000000 +0900 @@ -1017,7 +1017,9 @@ value_file = cStringIO.StringIO() try: writer = csv.writer(value_file) - writer.writerow(value) + writer.writerow( + [unicode(s).encode("utf-8") for s in value] + ) return value_file.getvalue() finally: value_file.close()
と変更したら、表示できるようになった。
が、キーをクリックして編集画面を表示しようとしたところで、
Traceback (most recent call last): File "/home/hakuja/Dev/gae/google_appengine/google/appengine/ext/webapp/__init__.py", line 507, in __call__ handler.get(*groups) File "/home/hakuja/Dev/gae/google_appengine/google/appengine/ext/admin/__init__.py", line 839, in get field = data_type.input_field(name, value, sample_values) File "/home/hakuja/Dev/gae/google_appengine/google/appengine/ext/admin/__init__.py", line 927, in input_field cgi.escape(string_value, True)) UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
とりあえず、
--- orig/google_appengine/google/appengine/ext/admin/__init__.py 2009-12-15 08:22:19.000000000 +0900 +++ google_appengine/google/appengine/ext/admin/__init__.py 2010-01-12 17:06:45.000000000 +0900 @@ -923,7 +923,7 @@ else: string_value = '' return '<input class="%s" name="%s" type="text" size="%d" value="%s"/>' % (cgi.escape(self.name()), cgi.escape(name), self.input_field_size(), - cgi.escape(string_value, True)) + cgi.escape(unicode(string_value, 'utf-8'), True)) def input_field_size(self): return 30
で表示できた。