refactored pickling of sessions

This commit is contained in:
niphlod
2014-09-11 22:51:23 +02:00
parent cef7202781
commit 5c9796ac72
2 changed files with 18 additions and 14 deletions
+11 -8
View File
@@ -28,7 +28,10 @@ from gluon.settings import global_settings
from gluon import recfile
import hashlib
import portalocker
import cPickle
try:
import cPickle as pickle
except:
import pickle
from pickle import Pickler, MARK, DICT, EMPTY_DICT
from types import DictionaryType
import cStringIO
@@ -830,7 +833,7 @@ class Session(Storage):
portalocker.lock(response.session_file,
portalocker.LOCK_EX)
response.session_locked = True
self.update(cPickle.load(response.session_file))
self.update(pickle.load(response.session_file))
response.session_file.seek(0)
oc = response.session_filename.split('/')[-1].split('-')[0]
if check_client and response.session_client != oc:
@@ -895,7 +898,7 @@ class Session(Storage):
if row:
# rows[0].update_record(locked=True)
# Unpickle the data
session_data = cPickle.loads(row.session_data)
session_data = pickle.loads(row.session_data)
self.update(session_data)
response.session_new = False
else:
@@ -907,7 +910,7 @@ class Session(Storage):
else:
response.session_id = None
response.session_new = True
# if there is no session id yet, we'll need to create a
# if there is no session id yet, we'll need to create a
# new session
else:
response.session_new = True
@@ -925,7 +928,7 @@ class Session(Storage):
response.cookies[response.session_id_name]['expires'] = \
cookie_expires.strftime(FMT)
session_pickled = cPickle.dumps(self)
session_pickled = pickle.dumps(self, pickle.HIGHEST_PROTOCOL)
response.session_hash = hashlib.md5(session_pickled).hexdigest()
if self.flash:
@@ -1084,7 +1087,7 @@ class Session(Storage):
return True
def _unchanged(self, response):
session_pickled = cPickle.dumps(self)
session_pickled = pickle.dumps(self, pickle.HIGHEST_PROTOCOL)
response.session_pickled = session_pickled
session_hash = hashlib.md5(session_pickled).hexdigest()
return response.session_hash == session_hash
@@ -1111,7 +1114,7 @@ class Session(Storage):
else:
unique_key = response.session_db_unique_key
session_pickled = response.session_pickled or cPickle.dumps(self)
session_pickled = response.session_pickled or pickle.dumps(self, pickle.HIGHEST_PROTOCOL)
dd = dict(locked=False,
client_ip=response.session_client,
@@ -1152,7 +1155,7 @@ class Session(Storage):
portalocker.lock(response.session_file, portalocker.LOCK_EX)
response.session_locked = True
if response.session_file:
session_pickled = response.session_pickled or cPickle.dumps(self)
session_pickled = response.session_pickled or pickle.dumps(self, pickle.HIGHEST_PROTOCOL)
response.session_file.write(session_pickled)
response.session_file.truncate()
finally: