Pregunta

Necesita leer los datos de la sesión de Pylons (solo lea, no escriba) en Node.js

Una vez que decodifique la base64, me queda una cadena que contiene un objeto Python serializado que es un dolor para analizar en nodo.js

¿Cómo puedo hacer que Beaker sea serializar a JSON en su lugar? Porque es mucho más fácil de manejar para Node.js.

¿Fue útil?

Solución

Tuve que mirar dentro de Beaker para encontrar lo que llamas "cuerdas serializadas de Python" son encurtidos de Python.

No creo que sea más que unas pocas líneas cambiarlo, lo que usa JSON para almacenar el dict.

Aquí hay un parche contra https://bitbucket.org/bbangert/beaker/src/257f147861c8:

diff -r 257f147861c8 beaker/session.py
--- a/beaker/session.py Mon Apr 18 11:38:53 2011 -0400
+++ b/beaker/session.py Sat Apr 30 14:19:12 2011 -0400
@@ -489,10 +489,10 @@
             nonce = b64encode(os.urandom(40))[:8]
             encrypt_key = crypto.generateCryptoKeys(self.encrypt_key,
                                              self.validate_key + nonce, 1)
-            data = util.pickle.dumps(self.copy(), 2)
+            data = util.json.dumps(self.copy())
             return nonce + b64encode(crypto.aesEncrypt(data, encrypt_key))
         else:
-            data = util.pickle.dumps(self.copy(), 2)
+            data = util.json.dumps(self.copy())
             return b64encode(data)

     def _decrypt_data(self):
@@ -504,10 +504,10 @@
                                              self.validate_key + nonce, 1)
             payload = b64decode(self.cookie[self.key].value[8:])
             data = crypto.aesDecrypt(payload, encrypt_key)
-            return util.pickle.loads(data)
+            return util.json.loads(data)
         else:
             data = b64decode(self.cookie[self.key].value)
-            return util.pickle.loads(data)
+            return util.json.loads(data)

     def save(self, accessed_only=False):
         """Saves the data for this session to persistent storage"""
diff -r 257f147861c8 beaker/util.py
--- a/beaker/util.py    Mon Apr 18 11:38:53 2011 -0400
+++ b/beaker/util.py    Sat Apr 30 14:19:12 2011 -0400
@@ -24,6 +24,11 @@
     import pickle
 else:
     import cPickle as pickle
+
+try:
+    import json
+except ImportError:
+    import simplejson as json

 from beaker.converters import asbool
 from beaker import exceptions
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top