471,313 Members | 1,932 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,313 software developers and data experts.

lxml + mod_python: cannot unmarshal code objects in restricted execution mode

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

Sep 13 '07 #1
3 2400
Dmitri Fedoruk wrote:
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?
Sure, lxml.etree can parse from file-like objects. Just hand in the result of
urlopen().

Apart from that, I saw that you found your way to the lxml mailing list, I'll
respond over there.

Stefan
Sep 13 '07 #2
On Sep 13, 5:05 pm, Dmitri Fedoruk <dfedo...@gmail.comwrote:
So, my configuration is the following:
Python 2.5.1
Server version: Apache/2.2.4 (FreeBSD)
mod_python-3.3.1
update:
lxml-1.3.4
libxslt-1.1.21
libxml2-2.6.29
Sep 13 '07 #3
On Sep 14, 3:04 am, Graham Dumpleton <Graham.Dumple...@gmail.com>
wrote:
Try forcing mod_python to run your code in the first interpreter
instance created by Python.
PythonInterpreter main_interpreter
Thank you very much, that solved the problem! A more detailed
discussion can also be found in the lxml-dev mailing list (
http://comments.gmane.org/gmane.comp...xml.devel/2942 )

Dmitri

Sep 14 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by David Connell | last post: by
1 post views Thread by wolf | last post: by
2 posts views Thread by Arso - Italy | last post: by
3 posts views Thread by Rune Hansen | last post: by
2 posts views Thread by Srijit Kumar Bhadra | last post: by
3 posts views Thread by Michael | last post: by
3 posts views Thread by yinglcs | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.