From cc724c2e61a6df1b7cded01b7eefe25c7850113d Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Tue, 2 Feb 2016 22:42:31 +0100 Subject: [PATCH] [FIX] base: centralize custom data serialization for builtin types only --- openerp/addons/base/ir/ir_values.py | 2 +- openerp/osv/orm.py | 3 +-- openerp/tools/convert.py | 3 +-- openerp/tools/misc.py | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/ir/ir_values.py b/openerp/addons/base/ir/ir_values.py index bf0128dffd6..5d8cb73373d 100644 --- a/openerp/addons/base/ir/ir_values.py +++ b/openerp/addons/base/ir/ir_values.py @@ -18,11 +18,11 @@ # along with this program. If not, see . # ############################################################################## -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', diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 06ef395afcd..169e7ecb2ea 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -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 diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py index bd7c214fd24..3cfc464ce8c 100644 --- a/openerp/tools/convert.py +++ b/openerp/tools/convert.py @@ -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 diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 0289e4c9d09..90b89eeb99a 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -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: