sql: use publisher unpickler to unpickle sql data (#36697)
This commit is contained in:
parent
fdd25e474c
commit
a6dfbcf669
20
wcs/sql.py
20
wcs/sql.py
|
@ -14,6 +14,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from cStringIO import StringIO
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
import datetime
|
||||
|
@ -26,6 +27,7 @@ from . import qommon
|
|||
from .qommon.storage import _take, parse_clause as parse_storage_clause
|
||||
from .qommon.substitution import invalidate_substitution_cache
|
||||
from .qommon import get_cfg
|
||||
from .publisher import UnpicklerClass
|
||||
|
||||
import wcs.categories
|
||||
import wcs.carddata
|
||||
|
@ -57,6 +59,10 @@ SQL_TYPE_MAPPING = {
|
|||
}
|
||||
|
||||
|
||||
def pickle_loads(value):
|
||||
return UnpicklerClass(StringIO(value)).load()
|
||||
|
||||
|
||||
class Criteria(qommon.storage.Criteria):
|
||||
def __init__(self, attribute, value, **kwargs):
|
||||
self.attribute = attribute.replace('-', '_')
|
||||
|
@ -1172,7 +1178,7 @@ class SqlMixin(object):
|
|||
if sql_type == 'date':
|
||||
value = value.timetuple()
|
||||
elif sql_type == 'bytea':
|
||||
value = cPickle.loads(str(value))
|
||||
value = pickle_loads(str(value))
|
||||
obdata[field.id] = value
|
||||
i += 1
|
||||
if field.store_display_value:
|
||||
|
@ -1182,7 +1188,7 @@ class SqlMixin(object):
|
|||
if field.store_structured_value:
|
||||
value = row[i]
|
||||
if value is not None:
|
||||
obdata['%s_structured' % field.id] = cPickle.loads(str(value))
|
||||
obdata['%s_structured' % field.id] = pickle_loads(str(value))
|
||||
if obdata['%s_structured' % field.id] is None:
|
||||
del obdata['%s_structured' % field.id]
|
||||
i += 1
|
||||
|
@ -1288,7 +1294,7 @@ class SqlDataMixin(SqlMixin):
|
|||
if o.time:
|
||||
o.time = o.time.timetuple()
|
||||
if row[6]:
|
||||
o.parts = cPickle.loads(str(row[6]))
|
||||
o.parts = pickle_loads(str(row[6]))
|
||||
return o
|
||||
|
||||
def set_evolution(self, value):
|
||||
|
@ -1504,11 +1510,11 @@ class SqlDataMixin(SqlMixin):
|
|||
if o.receipt_time:
|
||||
o.receipt_time = o.receipt_time.timetuple()
|
||||
if o.workflow_data:
|
||||
o.workflow_data = cPickle.loads(str(o.workflow_data))
|
||||
o.workflow_data = pickle_loads(str(o.workflow_data))
|
||||
if o.workflow_roles:
|
||||
o.workflow_roles = cPickle.loads(str(o.workflow_roles))
|
||||
o.workflow_roles = pickle_loads(str(o.workflow_roles))
|
||||
if o.submission_context:
|
||||
o.submission_context = cPickle.loads(str(o.submission_context))
|
||||
o.submission_context = pickle_loads(str(o.submission_context))
|
||||
|
||||
o.geolocations = {}
|
||||
for i, field in enumerate((cls._formdef.geolocations or {}).keys()):
|
||||
|
@ -1904,7 +1910,7 @@ class Session(SqlMixin, wcs.sessions.BasicSession):
|
|||
def _row2ob(cls, row):
|
||||
o = cls.__new__(cls)
|
||||
cls.id = str_encode(row[0])
|
||||
session_data = cPickle.loads(str(row[1]))
|
||||
session_data = pickle_loads(str(row[1]))
|
||||
for k, v in session_data.items():
|
||||
setattr(o, k, v)
|
||||
return o
|
||||
|
|
Loading…
Reference in New Issue