Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
7
Merge Requests
7
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
Jérome Perrin
erp5
Commits
7a3c67e8
Commit
7a3c67e8
authored
1 year ago
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
XMLExportImport: WIP support pickle protocol 3
parent
f11f4563
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
269 additions
and
74 deletions
+269
-74
product/ERP5/Document/BusinessTemplate.py
product/ERP5/Document/BusinessTemplate.py
+8
-6
product/ERP5Type/XMLExportImport/__init__.py
product/ERP5Type/XMLExportImport/__init__.py
+24
-11
product/ERP5Type/XMLExportImport/ppml.py
product/ERP5Type/XMLExportImport/ppml.py
+237
-57
No files found.
product/ERP5/Document/BusinessTemplate.py
View file @
7a3c67e8
...
...
@@ -79,6 +79,7 @@ from OFS import SimpleItem
from
OFS.Image
import
Pdata
import
coverage
from
io
import
BytesIO
from
six.moves
import
StringIO
from
copy
import
deepcopy
from
zExceptions
import
BadRequest
from
Products.ERP5Type.XMLExportImport
import
exportXML
,
customImporters
...
...
@@ -347,10 +348,11 @@ class BusinessTemplateArchive(object):
try
:
write
=
self
.
_writeFile
except
AttributeError
:
if
not
isinstance
(
obj
,
(
bytes
,
str
)
):
if
hasattr
(
obj
,
'read'
):
obj
.
seek
(
0
)
obj
=
obj
.
read
()
elif
not
isinstance
(
obj
,
bytes
):
#import pdb; pdb.set_trace()
if
not
isinstance
(
obj
,
bytes
):
obj
=
obj
.
encode
(
'utf-8'
)
self
.
revision
.
hash
(
path
,
obj
)
self
.
_writeString
(
obj
,
path
)
...
...
@@ -865,9 +867,9 @@ class ObjectTemplateItem(BaseTemplateItem):
obj
=
self
.
removeProperties
(
obj
,
1
,
keep_workflow_history
=
True
)
transaction
.
savepoint
(
optimistic
=
True
)
f
=
Bytes
IO
()
f
=
String
IO
()
exportXML
(
obj
.
_p_jar
,
obj
.
_p_oid
,
f
)
bta
.
addObject
(
f
,
key
,
path
=
path
)
bta
.
addObject
(
f
.
getvalue
().
encode
()
,
key
,
path
=
path
)
if
catalog_method_template_item
:
# add all datas specific to catalog inside one file
...
...
@@ -1083,8 +1085,8 @@ class ObjectTemplateItem(BaseTemplateItem):
for
path
,
old_object
in
upgrade_list
:
# compare object to see it there is changes
new_object
=
self
.
_objects
[
path
]
new_io
=
Bytes
IO
()
old_io
=
Bytes
IO
()
new_io
=
String
IO
()
old_io
=
String
IO
()
exportXML
(
new_object
.
_p_jar
,
new_object
.
_p_oid
,
new_io
)
new_obj_xml
=
new_io
.
getvalue
()
try
:
...
...
This diff is collapsed.
Click to expand it.
product/ERP5Type/XMLExportImport/__init__.py
View file @
7a3c67e8
...
...
@@ -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
from
base64
import
standard_b64encode
,
encodebytes
from
hashlib
import
sha1
from
Products.ERP5Type.Utils
import
ensure_list
#from zLOG import LOG
...
...
@@ -233,7 +233,6 @@ 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
encodebytes
from
ZODB.serialize
import
referencesf
from
ZODB.ExportImport
import
TemporaryFile
,
export_end_marker
from
ZODB.utils
import
p64
...
...
@@ -263,7 +262,6 @@ def reorderPickle(jar, p):
new_oid
=
storage
.
new_oid
):
"Remap a persistent id to an existing ID and create a ghost for it."
if
isinstance
(
ooid
,
tuple
):
ooid
,
klass
=
ooid
else
:
klass
=
None
...
...
@@ -280,13 +278,23 @@ def reorderPickle(jar, p):
unpickler
.
persistent_load
=
persistent_load
newp
=
BytesIO
()
pickler
=
OrderedPickler
(
newp
,
1
)
pickler
=
OrderedPickler
(
newp
,
3
)
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
...
...
@@ -300,14 +308,13 @@ def _mapOid(id_mapping, oid):
def
XMLrecord
(
oid
,
plen
,
p
,
id_mapping
):
# Proceed as usual
q
=
ppml
.
ToXMLUnpickler
f
=
BytesIO
(
p
)
u
=
q
(
f
)
f
=
BytesIO
(
p
)
u
=
ppml
.
ToXMLUnpickler
(
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
,
p
)
String
=
' <record id="%s" aka="%s">
\
n
%s </record>
\
n
'
%
(
id
,
aka
.
decode
()
,
p
)
return
String
def
exportXML
(
jar
,
oid
,
file
=
None
):
...
...
@@ -344,15 +351,21 @@ def exportXML(jar, oid, file=None):
# Do real export
if
file
is
None
:
file
=
TemporaryFile
()
file
=
TemporaryFile
(
mode
=
'w'
)
elif
isinstance
(
file
,
basestring
):
file
=
open
(
file
,
'w
+b
'
)
file
=
open
(
file
,
'w'
)
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.
Click to expand it.
product/ERP5Type/XMLExportImport/ppml.py
View file @
7a3c67e8
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment