[lxml-dev] lxml + mod_python: cannot unmarshal code objects inrestricted execution mode

Lee Brown lee.brown at elecdev.com
Thu Sep 13 17:40:33 CEST 2007


Greetings!

The first thing I'd suggest is to also put your query on the Mod Python list as
well.  

A few questions:

Are you trying to execute this code in a Handler or in a Filter?  There's world
of hidden trouble lurking in Filters because of their re-entrant nature.

Which Apache MPM are you using?  If you're using a multiple-process module, you
might try swithing to a single-process-multiple-thread module to see if this
behavior changes.

> -----Original Message-----
> From: lxml-dev-bounces at codespeak.net 
> [mailto:lxml-dev-bounces at codespeak.net] On Behalf Of Dmitri Fedoruk
> Sent: Thursday, September 13, 2007 11:18 AM
> To: lxml-dev at codespeak.net
> Subject: [lxml-dev] lxml + mod_python: cannot unmarshal code 
> objects inrestricted 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, this is the problem with UTF, 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
> _______________________________________________
> lxml-dev mailing list
> lxml-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/lxml-dev
> 



More information about the lxml-dev mailing list