Re-implemented copyreg picklers/unpicklers for DAL and Reference classes (due to errors on sessions)
This commit is contained in:
@@ -7,13 +7,15 @@ PY2 = sys.version_info[0] == 2
|
|||||||
if PY2:
|
if PY2:
|
||||||
import cPickle as pickle
|
import cPickle as pickle
|
||||||
import cStringIO as StringIO
|
import cStringIO as StringIO
|
||||||
|
import copy_reg as copyreg
|
||||||
hashlib_md5 = hashlib.md5
|
hashlib_md5 = hashlib.md5
|
||||||
else:
|
else:
|
||||||
import pickle
|
import pickle
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
import copyreg
|
||||||
hashlib_md5 = lambda s: hashlib.md5(bytes(s,'utf8'))
|
hashlib_md5 = lambda s: hashlib.md5(bytes(s,'utf8'))
|
||||||
|
|
||||||
pjoin = os.path.join
|
pjoin = os.path.join
|
||||||
exists = os.path.exists
|
exists = os.path.exists
|
||||||
ogetattr = object.__getattribute__
|
ogetattr = object.__getattribute__
|
||||||
osetattr = object.__setattr__
|
osetattr = object.__setattr__
|
||||||
|
|||||||
+11
-1
@@ -142,7 +142,7 @@ import copy
|
|||||||
import traceback
|
import traceback
|
||||||
import glob
|
import glob
|
||||||
|
|
||||||
from ._compat import pickle, hashlib_md5, pjoin, ogetattr, osetattr
|
from ._compat import pickle, hashlib_md5, pjoin, ogetattr, osetattr, copyreg
|
||||||
from ._globals import GLOBAL_LOCKER, THREAD_LOCAL, LOGGER, DEFAULT
|
from ._globals import GLOBAL_LOCKER, THREAD_LOCAL, LOGGER, DEFAULT
|
||||||
from ._load import have_serializers, serializers, is_jdbc, OrderedDict
|
from ._load import have_serializers, serializers, is_jdbc, OrderedDict
|
||||||
from .helpers.classes import SQLCallableList
|
from .helpers.classes import SQLCallableList
|
||||||
@@ -1081,3 +1081,13 @@ class DAL(object):
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("Unable to import table that does not exist.\nTry db.import_from_csv_file(..., map_tablenames={'table':'othertable'},ignore_missing_tables=True)")
|
raise RuntimeError("Unable to import table that does not exist.\nTry db.import_from_csv_file(..., map_tablenames={'table':'othertable'},ignore_missing_tables=True)")
|
||||||
|
|
||||||
|
|
||||||
|
def DAL_unpickler(db_uid):
|
||||||
|
return DAL('<zombie>', db_uid=db_uid)
|
||||||
|
|
||||||
|
|
||||||
|
def DAL_pickler(db):
|
||||||
|
return DAL_unpickler, (db._db_uid,)
|
||||||
|
|
||||||
|
copyreg.pickle(DAL, DAL_pickler, DAL_unpickler)
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import copy
|
import copy
|
||||||
|
import marshal
|
||||||
|
import struct
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from .._compat import exists
|
from .._compat import exists, copyreg
|
||||||
from .._globals import LOGGER
|
from .._globals import LOGGER
|
||||||
|
|
||||||
|
|
||||||
@@ -45,6 +47,18 @@ class Reference(long):
|
|||||||
self.__allocate()
|
self.__allocate()
|
||||||
self._record[key] = value
|
self._record[key] = value
|
||||||
|
|
||||||
|
def Reference_unpickler(data):
|
||||||
|
return marshal.loads(data)
|
||||||
|
|
||||||
|
def Reference_pickler(data):
|
||||||
|
try:
|
||||||
|
marshal_dump = marshal.dumps(long(data))
|
||||||
|
except AttributeError:
|
||||||
|
marshal_dump = 'i%s' % struct.pack('<i', long(data))
|
||||||
|
return (Reference_unpickler, (marshal_dump,))
|
||||||
|
|
||||||
|
copyreg.pickle(Reference, Reference_pickler, Reference_unpickler)
|
||||||
|
|
||||||
|
|
||||||
class SQLCallableList(list):
|
class SQLCallableList(list):
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user