Pylons & Beaker: сеансы в кодировке JSON

Необходимо читать данные сеанса Pylons (просто читать, а не записывать) в node.js

Как только я декодирую base64, у меня остается строка, содержащая сериализованный объект Python, который сложно разобрать в node.js.

Как я могу вместо этого заставить Beaker сериализоваться в JSON? Ибо с node.js гораздо проще справиться.


person mikeycgto    schedule 30.04.2011    source источник


Ответы (1)


мне пришлось заглянуть внутрь стакана, чтобы найти то, что вы называете «сериализованными строками Python», — это пикули Python.

я не думаю, что это будет больше, чем несколько строк, чтобы изменить его, чтобы использовать json для хранения dict.

вот патч против 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
person Dan D.    schedule 30.04.2011
comment
+1 за доступ к исходному коду, исправление проблемы и установку патча. - person Raynos; 30.04.2011