Re: [PyKDE] KHTML method returning null

2007-03-06 Thread Paul Giannaros
Ah, problem solved!

On Tuesday 06 March 2007 01:00, Jim Bublitz wrote:
 On Monday 05 March 2007 08:29, Paul Giannaros wrote:
  The documentation for KHTML's DOM::Document::getElementById (
  http://api.kde.org/3.5-api/kdelibs-apidocs/khtml/html/classDOM_1_1Documen
 t. html#a20 ) show's that the method returns null when an element in the
  webpage by the given ID hasn't been found. I would have thought that
  would have mapped to Python's None, but instead I'm getting a
  khtml.DOM.Element.

 If the underlying C++ call returns null, the PyKDE call should return None
 (see sip_api_return_from_new_instance in siplib/siplib.c)


Aha, I see.

  Whenever I try to call a method on it, my application crashes with
  terminate called after throwing an instance of 'DOM::DOMException'.
  Firstly, is this intended behaviour?

 I don't think so.

  Secondly, is there any way that I can
  check if the return value from that call is a valid object?

 Try accessing some method of the object, I suppose (you can also check its
 Python type, of course, but that only tells you what Python thinks the
 object is).

 I'd suggest posting a short example program that demonstrates the problem
 (include the html necessary to cause it too).

 Most of this stuff is straightforward sip wrappers - meaning sip generates
 the code the same as for any other C++ class, and there isn't anything
 unusual or customized that I can see. That suggests the most likely problem
 is in the implementation you're doing - the commonest problem is not
 keeping a Python reference to an object you're trying to access, for
 example.

 However the khtml, and especially DOM, stuff hasn't gotten a lot of use,
 and I have no application code to test it with, so problems either in PyKDE
 or the underlying KDE code are quite possible too.

 Either way, an example would be useful to see what's happening.

 Jim

It turns out that it was a documentation / cognitive problem. The docs say it 
returns null, but it turns out it just returns a 'null element'. You can call 
isNull() on the returned object to check whether or not it's valid. 

Thanks


  Maybe there is
  something you can do with the sip module? (though I can't see anything in
  the docs)
 
  Thanks,
  Paul
 
  ___
  PyKDE mailing listPyKDE@mats.imk.fraunhofer.de
  http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

 ___
 PyKDE mailing listPyKDE@mats.imk.fraunhofer.de
 http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

___
PyKDE mailing listPyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde


[PyKDE] KHTML method returning null

2007-03-05 Thread Paul Giannaros
The documentation for KHTML's DOM::Document::getElementById ( 
http://api.kde.org/3.5-api/kdelibs-apidocs/khtml/html/classDOM_1_1Document.html#a20
 ) 
show's that the method returns null when an element in the webpage by the 
given ID hasn't been found. I would have thought that would have mapped to 
Python's None, but instead I'm getting a khtml.DOM.Element. Whenever I try to 
call a method on it, my application crashes with terminate called after 
throwing an instance of 'DOM::DOMException'. 
Firstly, is this intended behaviour? Secondly, is there any way that I can 
check if the return value from that call is a valid object? Maybe there is 
something you can do with the sip module? (though I can't see anything in the 
docs)

Thanks,
Paul

___
PyKDE mailing listPyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde


Re: [PyKDE] KHTML method returning null

2007-03-05 Thread Jim Bublitz
On Monday 05 March 2007 08:29, Paul Giannaros wrote:
 The documentation for KHTML's DOM::Document::getElementById (
 http://api.kde.org/3.5-api/kdelibs-apidocs/khtml/html/classDOM_1_1Document.
html#a20 ) show's that the method returns null when an element in the
 webpage by the given ID hasn't been found. I would have thought that would
 have mapped to Python's None, but instead I'm getting a khtml.DOM.Element.

If the underlying C++ call returns null, the PyKDE call should return None 
(see sip_api_return_from_new_instance in siplib/siplib.c)

 Whenever I try to call a method on it, my application crashes with
 terminate called after throwing an instance of 'DOM::DOMException'.
 Firstly, is this intended behaviour? 

I don't think so.

 Secondly, is there any way that I can 
 check if the return value from that call is a valid object? 

Try accessing some method of the object, I suppose (you can also check its 
Python type, of course, but that only tells you what Python thinks the object 
is).

I'd suggest posting a short example program that demonstrates the problem 
(include the html necessary to cause it too).

Most of this stuff is straightforward sip wrappers - meaning sip generates the 
code the same as for any other C++ class, and there isn't anything unusual or 
customized that I can see. That suggests the most likely problem is in the 
implementation you're doing - the commonest problem is not keeping a Python 
reference to an object you're trying to access, for example.

However the khtml, and especially DOM, stuff hasn't gotten a lot of use, and I 
have no application code to test it with, so problems either in PyKDE or the 
underlying KDE code are quite possible too.

Either way, an example would be useful to see what's happening.

Jim


 Maybe there is 
 something you can do with the sip module? (though I can't see anything in
 the docs)

 Thanks,
 Paul

 ___
 PyKDE mailing listPyKDE@mats.imk.fraunhofer.de
 http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

___
PyKDE mailing listPyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde