Merge pull request #494 from niphlod/fix/pickle_refactoring
refactored pickling of sessions
This commit is contained in:
@@ -31,12 +31,13 @@ An interactive, stateful AJAX shell that runs Python code on the server.
|
||||
|
||||
import logging
|
||||
import new
|
||||
import os
|
||||
import cPickle
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except:
|
||||
import pickle
|
||||
import sys
|
||||
import traceback
|
||||
import types
|
||||
import wsgiref.handlers
|
||||
import StringIO
|
||||
import threading
|
||||
locker = threading.RLock()
|
||||
@@ -100,7 +101,7 @@ class History:
|
||||
name: the name of the global to remove
|
||||
value: any picklable value
|
||||
"""
|
||||
blob = cPickle.dumps(value)
|
||||
blob = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
if name in self.global_names:
|
||||
index = self.global_names.index(name)
|
||||
@@ -159,7 +160,7 @@ def represent(obj):
|
||||
code below to determine whether the object changes over time.
|
||||
"""
|
||||
try:
|
||||
return cPickle.dumps(obj)
|
||||
return pickle.dumps(obj, pickle.HIGHEST_PROTOCOL)
|
||||
except:
|
||||
return repr(obj)
|
||||
|
||||
@@ -258,7 +259,7 @@ def run(history, statement, env={}):
|
||||
if not name.startswith('__'):
|
||||
try:
|
||||
history.set_global(name, val)
|
||||
except (TypeError, cPickle.PicklingError), ex:
|
||||
except (TypeError, pickle.PicklingError), ex:
|
||||
UNPICKLABLE_TYPES.append(type(val))
|
||||
history.add_unpicklable(statement, new_globals.keys())
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user