Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
00d5c325
Commit
00d5c325
authored
Jul 22, 1999
by
joey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
parent
cda80744
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
318 additions
and
0 deletions
+318
-0
lib/python/ExportImportXML.py
lib/python/ExportImportXML.py
+318
-0
No files found.
lib/python/ExportImportXML.py
0 → 100644
View file @
00d5c325
import
string
,
struct
,
sys
,
tempfile
import
Shared.DC.xml.ppml
import
Shared.DC.xml.xyap
ppml
=
Shared
.
DC
.
xml
.
ppml
xyap
=
Shared
.
DC
.
xml
.
xyap
xyap
=
xyap
.
xyap
p64
=
ppml
.
p64
u64
=
ppml
.
u64
cp
=
ppml
.
cp
try
:
from
cStringIO
import
StringIO
except
:
from
StringIO
import
StringIO
export_end_marker
=
'
\
377
'
*
16
StringType
=
type
(
''
)
class
ZopeData
:
def
__init__
(
self
,
parser
,
tag
,
attrs
):
self
.
_pos
=
0
self
.
file
=
parser
.
file
self
.
tempfile
=
parser
.
tempfile
def
append
(
self
,
transaction
,
f
=
None
):
file
=
self
.
file
write
=
file
.
write
tfile
=
self
.
tempfile
dlen
=
tfile
.
tell
()
tfile
.
seek
(
0
)
id
=
transaction
.
serial
user
,
desc
,
ext
=
transaction
.
_ude
transaction
.
_ude
=
None
tlen
=
transaction
.
_thl
pos
=
self
.
_pos
file
.
seek
(
pos
)
tl
=
tlen
+
dlen
stl
=
p64
(
tl
)
write
(
struct
.
pack
(
">8s"
"8s"
"c"
"H"
"H"
"H"
,
id
,
stl
,
' '
,
len
(
user
),
len
(
desc
),
len
(
ext
),
))
if
user
:
write
(
user
)
if
desc
:
write
(
desc
)
if
ext
:
write
(
ext
)
cp
(
tfile
,
file
,
dlen
)
write
(
stl
)
self
.
_pos
=
pos
+
tl
+
8
class
Transaction
:
def
__init__
(
self
,
parser
,
tag
,
attrs
):
self
.
file
=
parser
.
file
self
.
tempfile
=
parser
.
tempfile
self
.
tempfile
.
seek
(
0
)
tyme
=
attrs
[
'time'
]
start
=
0
stop
=
string
.
find
(
tyme
[
start
:],
'-'
)
+
start
year
=
string
.
atoi
(
tyme
[
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
tyme
[
start
:],
'-'
)
+
start
month
=
string
.
atoi
(
tyme
[
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
tyme
[
start
:],
' '
)
+
start
day
=
string
.
atoi
(
tyme
[
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
tyme
[
start
:],
':'
)
+
start
hour
=
string
.
atoi
(
tyme
[
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
tyme
[
start
:],
':'
)
+
start
minute
=
string
.
atoi
(
tyme
[
start
:
stop
])
start
=
stop
+
1
second
=
string
.
atof
(
tyme
[
start
:])
t
=
(((((
year
-
1900
)
*
12
+
month
-
1
)
*
31
+
day
-
1
)
*
24
+
hour
)
*
60
+
minute
)
t
=
struct
.
pack
(
">If"
,
t
,
second
*
(
1L
<<
32
)
/
60
)
self
.
serial
=
t
self
.
_user
=
user
=
''
self
.
_descr
=
desc
=
''
self
.
_ext
=
ext
=
''
self
.
_thl
=
23
+
len
(
user
)
+
len
(
desc
)
+
len
(
ext
)
self
.
_ude
=
user
,
desc
,
ext
self
.
_index
=
{}
self
.
_tindex
=
[]
self
.
_pos
=
0
self
.
_oid
=
'
\
0
\
0
\
0
\
0
\
0
\
0
\
0
\
0
'
def
append
(
self
,
data
):
version
=
''
old
=
self
.
_index
.
get
(
self
.
_oid
,
0
)
pnv
=
None
if
old
:
file
=
self
.
file
file
.
seek
(
old
)
read
=
file
.
read
h
=
read
(
42
)
doid
,
oserial
,
sprev
,
stloc
,
vlen
,
splen
=
unpack
(
">8s8s8s8sH8s"
,
h
)
if
doid
!=
self
.
serial
:
raise
CorruptedDataError
,
h
tfile
=
self
.
tempfile
write
=
tfile
.
write
pos
=
self
.
_pos
serial
=
self
.
serial
oid
=
self
.
_oid
here
=
tfile
.
tell
()
+
pos
+
self
.
_thl
self
.
_tindex
.
append
(
self
.
_oid
,
here
)
serial
=
self
.
serial
write
(
struct
.
pack
(
">8s8s8s8sH8s"
,
oid
,
serial
,
p64
(
old
),
p64
(
pos
),
len
(
version
),
p64
(
len
(
data
))))
for
x
in
data
[
2
:]:
write
(
x
)
return
serial
def
save_user
(
self
,
tag
,
data
):
transaction
=
self
.
_transaction
if
len
(
data
)
>
2
:
v
=
data
[
2
]
else
:
v
=
''
self
.
_user
=
v
transaction
.
_thl
=
self
.
_transaction
.
_thl
+
len
(
v
)
transaction
.
_ude
=
v
,
transaction
.
_ude
[
1
],
transaction
.
_ude
[
2
]
return
v
def
save_description
(
self
,
tag
,
data
):
transaction
=
self
.
_transaction
if
len
(
data
)
>
2
:
v
=
data
[
2
]
else
:
v
=
''
a
=
data
[
1
]
if
a
.
has_key
(
'encoding'
):
encoding
=
a
[
'encoding'
]
else
:
encoding
=
''
if
encoding
:
v
=
unconvert
(
encoding
,
v
)
transaction
.
_descr
=
v
transaction
.
_thl
=
transaction
.
_thl
+
len
(
v
)
transaction
.
_ude
=
transaction
.
_ude
[
0
],
v
,
transaction
.
_ude
[
2
]
return
v
def
save_rec
(
self
,
tag
,
data
):
a
=
data
[
1
]
if
a
.
has_key
(
'id'
):
a
[
'id'
]
=
p64
(
string
.
atoi
(
a
[
'id'
])
+
1
)
if
a
.
has_key
(
'time'
):
start
=
0
stop
=
string
.
find
(
a
[
'time'
][
start
:],
'-'
)
+
start
year
=
string
.
atoi
(
a
[
'time'
][
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
a
[
'time'
][
start
:],
'-'
)
+
start
month
=
string
.
atoi
(
a
[
'time'
][
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
a
[
'time'
][
start
:],
' '
)
+
start
day
=
string
.
atoi
(
a
[
'time'
][
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
a
[
'time'
][
start
:],
':'
)
+
start
hour
=
string
.
atoi
(
a
[
'time'
][
start
:
stop
])
start
=
stop
+
1
stop
=
string
.
find
(
a
[
'time'
][
start
:],
':'
)
+
start
minute
=
string
.
atoi
(
a
[
'time'
][
start
:
stop
])
start
=
stop
+
1
second
=
string
.
atof
(
a
[
'time'
][
start
:])
a
[
'time'
]
=
struct
.
pack
(
">If"
,(((((
year
-
1900
)
*
12
)
+
month
-
1
)
*
31
+
day
-
1
)
*
24
+
hour
)
*
60
+
minute
,
second
*
(
1L
<<
32
)
/
60
)
data
[
1
]
=
a
return
data
def
start_transaction
(
self
,
tag
,
attrs
):
self
.
_transaction
=
Transaction
(
self
,
tag
,
attrs
)
return
self
.
_transaction
def
start_ZopeData
(
self
,
tag
,
attrs
):
self
.
_ZopeData
=
ZopeData
(
self
,
tag
,
attrs
)
return
self
.
_ZopeData
def
XMLtobbb
(
infile
,
outfile
,
binary
=
0
):
import
Shared.DC.xml.pyexpat
if
type
(
infile
)
is
StringType
:
data
=
open
(
infile
).
read
()
if
type
(
outfile
)
is
StringType
:
outfile
=
open
(
outfile
,
'w'
+
'b'
)
F
=
ppml
.
xmlPickler
()
F
.
end_handlers
[
'user'
]
=
save_user
F
.
end_handlers
[
'description'
]
=
save_description
F
.
end_handlers
[
'rec'
]
=
save_rec
F
.
start_handlers
[
'transaction'
]
=
start_transaction
F
.
start_handlers
[
'ZopeData'
]
=
start_ZopeData
F
.
binary
=
binary
F
.
file
=
outfile
F
.
tempfile
=
tempfile
.
TemporaryFile
()
p
=
xml
.
parsers
.
pyexpat
.
ParserCreate
()
p
.
CharacterDataHandler
=
F
.
handle_data
p
.
StartElementHandler
=
F
.
unknown_starttag
p
.
EndElementHandler
=
F
.
unknown_endtag
r
=
p
.
Parse
(
data
)
return
r
def
save_record
(
self
,
tag
,
data
):
file
=
self
.
file
write
=
file
.
write
pos
=
file
.
tell
()
file
.
seek
(
pos
)
a
=
data
[
1
]
if
a
.
has_key
(
'id'
):
oid
=
a
[
'id'
]
oid
=
ppml
.
p64
(
string
.
atoi
(
oid
))
v
=
''
for
x
in
data
[
2
:]:
v
=
v
+
x
l
=
ppml
.
p64
(
len
(
v
))
v
=
oid
+
l
+
v
return
v
class
zopedata
:
def
__init__
(
self
,
parser
,
tag
,
attrs
):
self
.
file
=
parser
.
file
write
=
self
.
file
.
write
write
(
'ZEXP'
)
def
append
(
self
,
data
):
file
=
self
.
file
write
=
file
.
write
pos
=
file
.
tell
()
file
.
seek
(
pos
)
write
(
data
)
def
start_zopedata
(
self
,
tag
,
data
):
return
zopedata
(
self
,
tag
,
data
)
def
save_zopedata
(
self
,
tag
,
data
):
file
=
self
.
file
write
=
file
.
write
pos
=
file
.
tell
()
file
.
seek
(
pos
)
write
(
export_end_marker
)
def
XMLtoExport
(
infile
,
outfile
):
import
Shared.DC.xml.pyexpat.pyexpat
pyexpat
=
Shared
.
DC
.
xml
.
pyexpat
.
pyexpat
if
type
(
infile
)
is
StringType
:
infile
=
open
(
infile
)
if
type
(
outfile
)
is
StringType
:
outfile
=
open
(
outfile
,
'w'
+
'b'
)
data
=
infile
.
read
()
F
=
ppml
.
xmlPickler
()
F
.
end_handlers
[
'record'
]
=
save_record
F
.
end_handlers
[
'ZopeData'
]
=
save_zopedata
F
.
start_handlers
[
'ZopeData'
]
=
start_zopedata
F
.
binary
=
1
F
.
file
=
outfile
p
=
pyexpat
.
ParserCreate
()
p
.
CharacterDataHandler
=
F
.
handle_data
p
.
StartElementHandler
=
F
.
unknown_starttag
p
.
EndElementHandler
=
F
.
unknown_endtag
r
=
p
.
Parse
(
data
)
return
r
def
XMLrecord
(
oid
,
len
,
p
):
q
=
ppml
.
ToXMLUnpickler
f
=
StringIO
(
p
)
u
=
q
(
f
)
u
.
idprefix
=
str
(
oid
)
+
'.'
p
=
u
.
load
().
__str__
(
4
)
if
f
.
tell
()
<
len
:
p
=
p
+
u
.
load
().
__str__
(
4
)
String
=
' <record id="%s">
\
n
%s </record>
\
n
'
%
(
oid
,
p
)
return
String
def
ExporttoXML
(
file
):
String
=
''
if
type
(
file
)
is
StringType
:
file
=
open
(
file
,
'rb'
)
read
=
file
.
read
if
read
(
4
)
!=
'ZEXP'
:
raise
POSException
.
ExportError
,
'Invalid export header'
String
=
String
+
'<?xml version="1.0"?>
\
012
<ZopeData>
\
n
'
while
1
:
h
=
read
(
16
)
if
h
==
export_end_marker
:
break
if
len
(
h
)
!=
16
:
raise
ExportError
,
'Truncated export file'
oid
=
ppml
.
u64
(
h
[:
8
])
l
=
ppml
.
u64
(
h
[
8
:
16
])
pos
=
file
.
tell
()
p
=
read
(
l
)
if
len
(
p
)
!=
l
:
raise
ExportError
,
'Truncated export file'
String
=
String
+
XMLrecord
(
oid
,
l
,
p
)
l
=
l
+
pos
String
=
String
+
'</ZopeData>
\
n
'
return
String
# End exportToXML
def
XMLstringToExport
(
data
,
outfile
):
import
Shared.DC.xml.pyexpat
if
type
(
outfile
)
is
StringType
:
outfile
=
open
(
outfile
,
'w'
+
'b'
)
F
=
ppml
.
xmlPickler
()
F
.
end_handlers
[
'record'
]
=
save_record
F
.
end_handlers
[
'ZopeData'
]
=
save_zopedata
F
.
start_handlers
[
'ZopeData'
]
=
start_zopedata
F
.
binary
=
1
F
.
file
=
outfile
p
=
xml
.
parsers
.
pyexpat
.
ParserCreate
()
p
.
CharacterDataHandler
=
F
.
handle_data
p
.
StartElementHandler
=
F
.
unknown_starttag
p
.
EndElementHandler
=
F
.
unknown_endtag
r
=
p
.
Parse
(
data
)
return
r
if
__name__
==
'__main__'
:
exportToXML
(
sys
.
argv
[
1
])
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