Ошибка довольно очевидна, если взглянуть на источники, хотя они совершенно не зависят от ОС. В sessions.py строки 544-547:
string_cookie = os.environ.get(u"HTTP_COOKIE", u"")
self.cookie = Cookie.SimpleCookie()
self.output_cookie = Cookie.SimpleCookie()
self.cookie.load(string_cookie)
строк 544 очень вероятно, что string_cookie
- это юникод (хотя это может быть байтовая строка из окружения, эти u""
означают, что автор sessions.py
изо всех сил пытается получить его как юникод! -). Между тем в Cookie.py строк 624-628:
if type(rawdata) == type(""):
self.__ParseString(rawdata)
else:
# self.update() wouldn't call our custom __setitem__
for k, v in rawdata.items():
строка 624 анализирует только строку byte : все остальное (включая строку в кодировке Unicode!) Обрабатывается как dict (откуда происходит сбой).
Очевидно, этот Cookie.py явно , а не тот, для которого был создан этот sessions.py. Так что же могло случиться ...? Ну, мы, конечно, знаем, что App Engine строго Python 2.5, а Cookie.py, который мы показали, - это Python 2.6. Итак, давайте посмотрим на Cookie.py в 2.5 (строки 618-621 в этой версии):
if type(rawdata) == type(""):
self.__ParseString(rawdata)
else:
self.update(rawdata)
так что в 2.5, учитывая пустую строку в юникоде, cookie (который диктует подклассы) делает self.update(u'')
... что является безобидным no-op. Комментарий в 2.6 показывает, почему сопровождающий Cookie.py переключился на текущий цикл ... который прерывается, когда rawdata u''
.
Короче говоря: установите Python 2.5 на свой компьютер с Windows и используйте эту версию с GAE SDK, не 2.6, которую вы используете в настоящее время - если вы действительно не любите отладка очень тонких различий версий, где неправильное использование было безобидным в 2.5, но ломается в 2.6, как этот ;-). Также введите ошибку об этом в трекер gaeutilities, так как этот вызов load
с пустой строкой Unicode просто неверен, хотя в 2.5 это безобидно.
В частности, получите соответствующую Windows msi 2.5.4 из здесь , в зависимости от того, установлена ли у вас 32-битная или 64-битная версия Windows.