[FIX] base: centralize custom data serialization for builtin types only

This commit is contained in:
Olivier Dony 2016-02-02 22:42:31 +01:00
parent 000c681f1e
commit cc724c2e61
4 changed files with 22 additions and 5 deletions

View File

@ -18,11 +18,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import pickle
from openerp.osv import osv, fields
from openerp.osv.orm import except_orm
from openerp.tools.safe_eval import safe_eval as eval
from openerp.tools import pickle
EXCLUDED_FIELDS = set((
'report_sxw_content', 'report_rml_content', 'report_sxw', 'report_rml',

View File

@ -49,7 +49,6 @@ import datetime
import itertools
import logging
import operator
import pickle
import re
import simplejson
import time
@ -65,7 +64,7 @@ import openerp
import openerp.netsvc as netsvc
import openerp.tools as tools
from openerp.tools.config import config
from openerp.tools.misc import CountingStream
from openerp.tools.misc import CountingStream, pickle
from openerp.tools.safe_eval import safe_eval as eval
from openerp.tools.translate import _
from openerp import SUPERUSER_ID

View File

@ -23,7 +23,6 @@ import cStringIO
import csv
import logging
import os.path
import pickle
import re
# for eval context:
@ -53,7 +52,7 @@ from translate import _
# List of etree._Element subclasses that we choose to ignore when parsing XML.
from misc import SKIPPED_ELEMENT_TYPES
from misc import unquote
from misc import pickle, unquote
# Import of XML records requires the unsafe eval as well,
# almost everywhere, which is ok because it supposedly comes

View File

@ -27,6 +27,7 @@ Miscellaneous tools used by OpenERP.
"""
from functools import wraps
import cPickle
import cProfile
import subprocess
import logging
@ -36,6 +37,7 @@ import sys
import threading
import time
import zipfile
from cStringIO import StringIO
from collections import defaultdict
from datetime import datetime
from itertools import islice, izip, groupby
@ -1090,4 +1092,21 @@ def stripped_sys_argv(*strip_args):
return [x for i, x in enumerate(args) if not strip(args, i)]
class Pickle(object):
@classmethod
def load(cls, stream):
unpickler = cPickle.Unpickler(stream)
# pickle builtins: str/unicode, int/long, float, bool, tuple, list, dict, None
unpickler.find_global = None
return unpickler.load()
@classmethod
def loads(cls, text):
return cls.load(StringIO(text))
dumps = cPickle.dumps
dump = cPickle.dump
pickle = Pickle
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: