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

View File

@ -49,7 +49,6 @@ import datetime
import itertools import itertools
import logging import logging
import operator import operator
import pickle
import re import re
import simplejson import simplejson
import time import time
@ -65,7 +64,7 @@ import openerp
import openerp.netsvc as netsvc import openerp.netsvc as netsvc
import openerp.tools as tools import openerp.tools as tools
from openerp.tools.config import config 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.safe_eval import safe_eval as eval
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID

View File

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

View File

@ -27,6 +27,7 @@ Miscellaneous tools used by OpenERP.
""" """
from functools import wraps from functools import wraps
import cPickle
import cProfile import cProfile
import subprocess import subprocess
import logging import logging
@ -36,6 +37,7 @@ import sys
import threading import threading
import time import time
import zipfile import zipfile
from cStringIO import StringIO
from collections import defaultdict from collections import defaultdict
from datetime import datetime from datetime import datetime
from itertools import islice, izip, groupby 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)] 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: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: