私は、glowscript.org にあるアプリケーションの GAE を Python 2.5 から Python 2.7 に更新する際に深刻な問題を抱えています。現在、GAE Launcher 1.7.6 を使用して Windows でローカルにテストしています。
ユーザーはスペースを含む名前のフォルダーを作成でき、アプリはスペースを「%20」に変換してデータストアのキーを形成します。これらのフォルダー内のファイル名についても同様です。このようなキーにデータが依存しているかなりの数のユーザーが、glowscript.org に存在します。
Python 2.7 バージョンの奇妙な問題をローカルでデバッグしようとしたところ、GAE データストア機構に大きな変更があったことが明らかになりました。ユーザーが「Test Cases」という名前のフォルダーを作成するとします。このフォルダー名は、glowscript.org と一致して「Test%20Cases」に変換され、PUT 操作のキーとして使用されます。
folder = 'Test%20Cases' f = Folder( parent = username, key_name = folder, public=True ) # フォルダーは db.Model から継承 f.put()
Python 2.7 とランチャー 1.7.6 で実行したときにログに表示されるのは、「%20」がスペースに変換されたことです。
"PUT /api/user/test0324k/folder/Test Cases HTTP/1.1" 200 -
Python 2.5 と GAE Launcher 1.7.2 で同じ操作を (ローカルで) 行うと、ログに次のように表示されます。
"PUT /api/user/test0324k/folder/Test%20Cases HTTP/1.1" 200 -
Web にデプロイすると、データに「%20」を含むキーが含まれているため、ユーザーはエラーを受け取り、これらのキーに到達する方法がなくなります。私は Python 2.5 バージョンにとどまることはできません。なぜなら、それはすでに非推奨であり、間もなく姿を消すからです。多くの人の作品を破壊せずに前進するにはどうすればよいでしょうか?