Tried to allow the parser to work under Python 2.X and SAX2

svn: r23
This commit is contained in:
Don Allingham
2001-05-17 23:08:27 +00:00
parent e6d6f119cc
commit 26b3b364c3
3 changed files with 129 additions and 67 deletions

View File

@@ -21,6 +21,8 @@
from RelLib import *
from GrampsParser import *
import intl
_ = intl.gettext
import string
import time
@@ -29,11 +31,19 @@ import os
from gnome.ui import *
import xml.sax
import xml.sax.saxexts
import xml.sax.saxutils
import xml.parsers.expat
_ = intl.gettext
#-------------------------------------------------------------------------
#
# Try to abstract SAX1 from SAX2
#
#-------------------------------------------------------------------------
try:
import xml.sax.saxexts
sax = 1
except:
from codecs import *
sax = 2
#-------------------------------------------------------------------------
#
@@ -43,15 +53,23 @@ _ = intl.gettext
#-------------------------------------------------------------------------
def importData(database, filename, callback):
parser = xml.sax.saxexts.make_parser()
basefile = os.path.dirname(filename)
database.smap = {}
database.pmap = {}
database.fmap = {}
parser.setDocumentHandler(GrampsParser(database,callback,basefile,1))
xml_file = gzip.open(filename,"rb")
parser.parseFile(xml_file)
if sax == 1:
parser = xml.sax.saxexts.make_parser()
parser.setDocumentHandler(GrampsParser(database,callback,basefile,1))
parser.setErrorHandler(xml.sax.saxutils.ErrorRaiser())
xml_file = gzip.open(filename,"rb")
parser.parseFile(xml_file)
else:
parser = xml.sax.make_parser()
parser.setContentHandler(GrampsParser(database,callback,basefile,1))
xml_file = EncodedFile(gzip.open(filename,"rb"),'utf-8','latin-1')
parser.parse(xml_file)
xml_file.close()
#-------------------------------------------------------------------------
@@ -62,19 +80,26 @@ def importData(database, filename, callback):
#-------------------------------------------------------------------------
def loadData(database, filename, callback):
parser = xml.sax.saxexts.make_parser()
basefile = os.path.dirname(filename)
database.smap = {}
database.pmap = {}
database.fmap = {}
parser.setErrorHandler(xml.sax.saxutils.ErrorRaiser())
parser.setDocumentHandler(GrampsParser(database,callback,basefile,0))
filename = os.path.normpath(filename)
if sax == 1:
parser = xml.sax.saxexts.make_parser()
parser.setDocumentHandler(GrampsParser(database,callback,basefile,0))
parser.setErrorHandler(xml.sax.saxutils.ErrorRaiser())
else:
parser = xml.sax.make_parser()
parser.setContentHandler(GrampsParser(database,callback,basefile,0))
try:
xml_file = gzip.open(filename,"rb")
if sax == 1:
xml_file = gzip.open(filename,"rb")
else:
xml_file = EncodedFile(gzip.open(filename,"rb"),'utf-8','latin-1')
except IOError,msg:
GnomeErrorDialog(filename + _(" could not be opened\n") + str(msg))
return 0
@@ -83,13 +108,13 @@ def loadData(database, filename, callback):
return 0
try:
parser.parseFile(xml_file)
if sax == 1:
parser.parseFile(xml_file)
else:
parser.parse(xml_file)
except xml.sax.SAXParseException:
GnomeErrorDialog(filename + _(" is a corrupt file"))
return 0
except xml.parsers.expat.ExpatError:
GnomeErrorDialog(filename + _(" is a corrupt file"))
return 0
except IOError,msg:
GnomeErrorDialog(filename + _(" is not a valid gramps file\n") + \
str(msg))
@@ -97,12 +122,29 @@ def loadData(database, filename, callback):
except:
GnomeErrorDialog(_("Could not read ") + filename)
return 0
xml_file.close()
return 1
if __name__ == "__main__":
import sys
import time
import profile
def lcb(val):
pass
db = RelDataBase()
file = sys.argv[1]
t1 = time.time()
loadData(db,file,lcb)
t2 = time.time()
print t2 - t1