【发布时间】:2013-03-25 01:45:56
【问题描述】:
对于在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 操作中的键:
文件夹 = '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 -
如果我部署到网络,用户会收到错误,因为他们的数据具有包含“%20”的键,而现在无法访问这些键。我不能继续使用 Python 2.5 版本,因为它已经被弃用并且很快就会消失。在不破坏许多人的工作的情况下,我能做些什么来继续前进?
【问题讨论】:
-
为什么不替换文件夹模型中的空格?就在
put-ing 之前。 -
那些日志消息与数据存储无关。他们正在记录 HTTP PUT 请求。