D
Dmitri Fedoruk
Hello everyone,
I'm developing a mod_python application that is based on XML\XSLT
transforming.
I used 4Suite libraries for that, but as the speed was unacceptable
for me, I switched to lxml. Everything became much easier and 10 times
faster, but I've encountered the subject problem.
In brief - all my data and xslt are stored and transferred in UTF-8.
With 4Suite everything was fine all the time. With lxml it works fine
from the console, but inside mod_python it occasionaly dies, ~ one
time out of three. Strange - the same code with the same data works or
dies by its own means.
As far as I have found, there was a similar problem with PyXML and
encodings module, but there was no clear solution.
So, my configuration is the following:
Python 2.5.1
Server version: Apache/2.2.4 (FreeBSD)
mod_python-3.3.1
And the relevant parts of my code are these:
def extApplyXslt(xslt, data, logger ):
try:
strXslt = urllib2.urlopen(xslt).read()
# i have to read the xslt url to the python string
except urllib2.HTTPError, e:
.......
except urllib2.URLError, e:
.............
try:
xslt_parser = etree.XMLParser()
xslt_parser.resolvers.add( PrefixResolver("XSLT") )
# and now I have to use the string; a more elegant solution,
anyone?
f = StringIO(strXslt)
xslt_doc = etree.parse(f, xslt_parser)
# and here where the problem comes
transform = etree.XSLT(xslt_doc)
except Exception, exc:
logger.log(logging.CRITICAL, exc.__str__() )
try:
result_tree = transform(data)
return etree.tostring(result_tree, 'utf-8')
except Exception, exc:
print "xslt processing error!", exc.__str__()
return ""
It dies with the message 'cannot unmarshal code objects in restricted
execution mode'. By profiling I detected the point where problem
occurs:
transform = etree.XSLT(xslt_doc)
So, I would be grateful for any suggestions how to get rid of this.
I'd really like to use lxml. Maybe I should initialize the xslt
processor in somehow other way?
Thanks in advance,
Dmitri
I'm developing a mod_python application that is based on XML\XSLT
transforming.
I used 4Suite libraries for that, but as the speed was unacceptable
for me, I switched to lxml. Everything became much easier and 10 times
faster, but I've encountered the subject problem.
In brief - all my data and xslt are stored and transferred in UTF-8.
With 4Suite everything was fine all the time. With lxml it works fine
from the console, but inside mod_python it occasionaly dies, ~ one
time out of three. Strange - the same code with the same data works or
dies by its own means.
As far as I have found, there was a similar problem with PyXML and
encodings module, but there was no clear solution.
So, my configuration is the following:
Python 2.5.1
Server version: Apache/2.2.4 (FreeBSD)
mod_python-3.3.1
And the relevant parts of my code are these:
def extApplyXslt(xslt, data, logger ):
try:
strXslt = urllib2.urlopen(xslt).read()
# i have to read the xslt url to the python string
except urllib2.HTTPError, e:
.......
except urllib2.URLError, e:
.............
try:
xslt_parser = etree.XMLParser()
xslt_parser.resolvers.add( PrefixResolver("XSLT") )
# and now I have to use the string; a more elegant solution,
anyone?
f = StringIO(strXslt)
xslt_doc = etree.parse(f, xslt_parser)
# and here where the problem comes
transform = etree.XSLT(xslt_doc)
except Exception, exc:
logger.log(logging.CRITICAL, exc.__str__() )
try:
result_tree = transform(data)
return etree.tostring(result_tree, 'utf-8')
except Exception, exc:
print "xslt processing error!", exc.__str__()
return ""
It dies with the message 'cannot unmarshal code objects in restricted
execution mode'. By profiling I detected the point where problem
occurs:
transform = etree.XSLT(xslt_doc)
So, I would be grateful for any suggestions how to get rid of this.
I'd really like to use lxml. Maybe I should initialize the xslt
processor in somehow other way?
Thanks in advance,
Dmitri