Error en Windows usando la sesión de appengine-utilities

Me encontré con un problema extraño al intentar transferir un proyecto a una máquina con Windows.

En mi proyecto, uso un controlador de sesión ( http://gaeutilities.appspot.com/session ) funciona bien en mi mac pero en Windows obtengo:

Seguimiento (última llamada más reciente): Archivo “C: \ Archivos de progtwig (x86) \ Google \ google_appengine \ google \ appengine \ ext \ webapp__init __. Py”, línea 510, en call handler.get (* grupos) Archivo “C: \ Development \ Byggmax.Affiliate \ bmaffiliate \ admin.py “, línea 29, en get session = Session () Archivo” C: \ Development \ Byggmax.Affiliate \ bmaffiliate \ appengine_utilities \ sessions.py “, línea 547, en el propio inicio .cookie.load (string_cookie) Archivo “C: \ Python26 \ lib \ Cookie.py”, línea 628, en carga para k, v en rawdata.items (): AttributeError: el objeto ‘unicode’ no tiene atributo ‘elementos’

¿Alguien familiarizado con el controlador de sesión que sabe algo de esto? Toda la ayuda es bienvenida!

..fredrik

El error es bastante claro al observar las fonts, aunque es perfectamente independiente del sistema operativo. En session.py líneas 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) 

las líneas 544 hacen que sea muy probable que string_cookie sea ​​unicode (aunque podría ser una cadena de bytes del entorno, esas u"" significan que el autor de sessions.py está tratando de obtenerlo como unicode! -). Mientras tanto en Cookie.py líneas 624-628:

 if type(rawdata) == type(""): self.__ParseString(rawdata) else: # self.update() wouldn't call our custom __setitem__ for k, v in rawdata.items(): 

la línea 624 solo analiza una cadena de bytes : cualquier otra cosa (incluida una cadena Unicode!) se trata como un dict (de donde se produce el locking).

Obviamente, este Cookie.py no es enfáticamente el mismo para el que fue desarrollado este session.py. Entonces, ¿qué puede haber pasado …? Bueno, sí sabemos, por supuesto, que App Engine es estrictamente Python 2.5 y el Cookie.py que mostramos es el de Python 2.6. Así que echemos un vistazo a Cookie.py en 2.5 (líneas 618-621 en esta versión):

  if type(rawdata) == type(""): self.__ParseString(rawdata) else: self.update(rawdata) 

por lo tanto, en 2.5, dada una cadena Unicode vacía, la cookie (que self.update(u'') subclases) hace self.update(u'') … que es una no-op inocua. El comentario en 2.6 muestra por qué el mantenedor de Cookie.py cambió al bucle actual … que se interrumpe cuando la u'' rawdata.

En pocas palabras: instale Python 2.5 en su máquina con Windows, y use esa versión con el SDK de GAE, no con el 2.6 que está utilizando actualmente, a menos que realmente ame la depuración de diferencias de versión extremadamente sutiles donde un uso incorrecto fue inocuo en 2.5, pero Se rompe en 2.6, como este ;-). También ingrese un error sobre esto en el rastreador de gaeutilities, ya que la llamada a load con una cadena Unicode vacía es simplemente errónea, aunque en 2.5 resulta que es inocua.

Específicamente, obtenga el msi de Windows apropiado de 2.5.4 desde aquí , dependiendo de si tiene una versión de Windows de 32 bits o de 64 bits.

Siguió el enlace a esta publicación desde el problema publicado en el rastreador de problemas de proyectos. Como se publicó allí, mi respuesta es que no me concentraré en aplicar actualizaciones para que el proyecto funcione con Python 2.6. Sin embargo, pondré un poco más énfasis en echar un vistazo a la llamada para cargar con una cadena Unicode vacía.