Commit c870a036 authored by Jérome Perrin's avatar Jérome Perrin

Revert "XMLExportImport: WIP support pickle protocol 3 🚧"

This reverts commit 03f7c962.
parent 03f7c962
......@@ -78,7 +78,7 @@ from OFS.Traversable import NotFound
from OFS import SimpleItem
from OFS.Image import Pdata
import coverage
from io import BytesIO, StringIO
from io import BytesIO
from copy import deepcopy
from zExceptions import BadRequest
from Products.ERP5Type.XMLExportImport import exportXML, customImporters
......@@ -347,11 +347,10 @@ class BusinessTemplateArchive(object):
try:
write = self._writeFile
except AttributeError:
if hasattr(obj, 'read'):
if not isinstance(obj, (bytes, str)):
obj.seek(0)
obj = obj.read()
#import pdb; pdb.set_trace()
if not isinstance(obj, bytes):
elif not isinstance(obj, bytes):
obj = obj.encode('utf-8')
self.revision.hash(path, obj)
self._writeString(obj, path)
......@@ -866,9 +865,9 @@ class ObjectTemplateItem(BaseTemplateItem):
obj = self.removeProperties(obj, 1, keep_workflow_history = True)
transaction.savepoint(optimistic=True)
f = StringIO()
f = BytesIO()
exportXML(obj._p_jar, obj._p_oid, f)
bta.addObject(f.getvalue().encode(), key, path=path)
bta.addObject(f, key, path=path)
if catalog_method_template_item:
# add all datas specific to catalog inside one file
......
......@@ -48,7 +48,7 @@ from lxml import etree
from lxml.etree import Element, SubElement
from xml_marshaller.xml_marshaller import Marshaller
from OFS.Image import Pdata
from base64 import standard_b64encode, encodebytes
from base64 import standard_b64encode
from hashlib import sha1
from Products.ERP5Type.Utils import ensure_list
#from zLOG import LOG
......@@ -223,6 +223,7 @@ def Folder_asXML(object, omit_xml_declaration=True, root=None):
## The code below was initially from OFS.XMLExportImport
from six import string_types as basestring
from base64 import encodestring
from ZODB.serialize import referencesf
from ZODB.ExportImport import TemporaryFile, export_end_marker
from ZODB.utils import p64
......@@ -252,7 +253,7 @@ def reorderPickle(jar, p):
new_oid=storage.new_oid):
"Remap a persistent id to an existing ID and create a ghost for it."
print('persistent_load1', ooid)
if isinstance(ooid, tuple): ooid, klass = ooid
else: klass=None
......@@ -269,43 +270,34 @@ def reorderPickle(jar, p):
unpickler.persistent_load=persistent_load
newp=BytesIO()
pickler = OrderedPickler(newp, 3)
pickler=OrderedPickler(newp,1)
pickler.persistent_id=persistent_id
classdef = unpickler.load()
obj = unpickler.load()
pickler.dump(classdef)
pickler.dump(obj)
if 0: # debug
debugp = BytesIO()
debugpickler = OrderedPickler(debugp, 3)
debugpickler.persistent_id = persistent_id
debugpickler.dump(obj)
import pickletools
print(debugp.getvalue())
print(pickletools.dis(debugp.getvalue()))
p=newp.getvalue()
return obj, p
def _mapOid(id_mapping, oid):
idprefix = str(u64(oid))
id = id_mapping[idprefix]
old_aka = encodebytes(oid)[:-1]
aka=encodebytes(p64(long_(id)))[:-1] # Rebuild oid based on mapped id
old_aka = encodestring(oid)[:-1]
aka=encodestring(p64(long_(id)))[:-1] # Rebuild oid based on mapped id
id_mapping.setConvertedAka(old_aka, aka)
return idprefix+'.', id, aka
def XMLrecord(oid, plen, p, id_mapping):
# Proceed as usual
f = BytesIO(p)
u = ppml.ToXMLUnpickler(f)
q=ppml.ToXMLUnpickler
f=BytesIO(p)
u=q(f)
u.idprefix, id, aka = _mapOid(id_mapping, oid)
p = u.load(id_mapping=id_mapping).__str__(4)
p=u.load(id_mapping=id_mapping).__str__(4)
if f.tell() < plen:
p=p+u.load(id_mapping=id_mapping).__str__(4)
String=' <record id="%s" aka="%s">\n%s </record>\n' % (id, aka.decode(), p)
String=' <record id="%s" aka="%s">\n%s </record>\n' % (id, aka, p)
return String
def exportXML(jar, oid, file=None):
......@@ -342,21 +334,15 @@ def exportXML(jar, oid, file=None):
# Do real export
if file is None:
file = TemporaryFile(mode='w')
file = TemporaryFile()
elif isinstance(file, basestring):
file = open(file, 'w')
file = open(file, 'w+b')
write = file.write
write('<?xml version="1.0"?>\n<ZopeData>\n')
for oid in reordered_oid_list:
p = getReorderedPickle(oid)
write(XMLrecord(oid, len(p), p, id_mapping))
write('</ZopeData>\n')
if 0:
try:
print(file.getvalue())
except AttributeError:
pass
import pdb; pdb.set_trace()
return file
class zopedata:
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment