[lxml-dev] lxml 1.1 problems with python 2.3

Martijn Faassen faassen at infrae.com
Fri Dec 1 13:44:53 CET 2006


Stefan Behnel wrote:
[snip]
>> It's consistently missing though in Python 2.3. Perhaps it accidentally
>> gets turned off together with thread support? I did try to test this
>> theory yesterday though on Python 2.4 by explicitly disabling tests, and
>> that didn't help.
> 
> Ok, then, first thing to check: does "previousElement" turn up as a static
> function in the generated src/lxml/etree.h? 

The only reference to previousElement (and nextElement) in etree.h are here:

extern DL_IMPORT(xmlNode) (*(nextElement(xmlNode (*))));
extern DL_IMPORT(xmlNode) (*(previousElement(xmlNode (*))));



> Could you check what the
> preprocessor sees in objectify.c (gcc -E)?

Hm, I wasn't previously familiar with gcc -E. I tried running it against 
objectify.c but got a lot of missing includes for Python and libxml2 
(which is odd as these things are in /usr/include).

I'm not quite sure how you generate your output, but here's my reference 
to previousElement when I do gcc -E:

extern DL_IMPORT(xmlNode) (*(nextElement(xmlNode (*))));
extern DL_IMPORT(xmlNode) (*(previousElement(xmlNode (*))));
...
   __pyx_v_next = nextElement;
...
   __pyx_v_next = previousElement;
...

Hm, is it possible I'm using the wrong version of Pyrex? I have lxml's 
version installed for Python 2.4 but I guess I don't have that one for 
Python 2.3... Us having to maintain our own version of Pyrex rather 
sucks. I just installed lxml's version of Pyrex, and now the tests 
start. We still get some failures, though. Most of them are because 
'assertFalse' doesn't appear to exist. I added this to HelperTestCase 
and made those errors go away.

There's also the use of operator.itemgetter, which was only introduced 
in Python 2.4. I hacked up a simplistic implementation too.

Now we're down to one failure in Python 2.3:

======================================================================
FAIL: test_findall (lxml.tests.test_objectify.ObjectifyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "/home/faassen/working/lxml/src/lxml/tests/test_objectify.py", 
line 218, in test_findall
     root.getchildren()[:2])
   File "/usr/lib/python2.3/unittest.py", line 302, in failUnlessEqual
     raise self.failureException, \
AssertionError: [<Element b at b787f0cc>, ''] != [<Element b at 
b787f0cc>, '']

You'd think that this *should* be equal and thus succeed. Possibly some 
rich comparison feature that doesn't exist yet in Python 2.3? Back to 
you, Stephan. :)

Regards,

Martijn


More information about the lxml-dev mailing list