Hi Jim, I've been trying out your python extensions and find them very useful to ease the wrapping process. I did however find a problem with the behaviour of the container_from_python_sequence converter.
When having two overloaded functions, one of which expects a container of TestObjects and the other a single TestObject, I get this error in Python when calling the overloaded function with a single TestObject. TypeError: object of type 'TestObject' has no len() This is due to the use of the len() function on a non-sequence in the 'convertible' method of container_from_python_sequence. The other issue is that the type of objects in the sequence is only checked if the sequence has more-than-one item, and not when it only contains one. I've made a couple of changes, included in the patch below. (A) Check if the input is in fact a sequence. (B) Check the contained type when the sequence length is non-zero Cheers Brian -----------------container.hpp---------------------------------- @@ -37,8 +37,10 @@ struct container_from_python_sequence { static void* convertible(PyObject * obj) { try { + if (!PySequence_Check(obj)) + return NULL; object sequence(handle<>(borrowed(obj))); - if (len(sequence) > 1) { + if (len(sequence) > 0) { if (!extract<Value>(sequence[0]).check()) return NULL; } --------------------------------------------------------- On 14 May 2010 01:53, Jim Bosch <tallji...@gmail.com> wrote: > > In the hope that others might find them useful, and perhaps contribute some > of their own, I've posted a collection of miscellaneous Boost.Python > extensions I've been using at the Boost sandbox: > > http://svn.boost.org/svn/boost/sandbox/python_extensions > > Features include: > > - Conversions between STL containers and Boost.Range iterator ranges and > Python builtins like list, tuple, and dict. > > - Conversions between Boost.Fusion sequences and Python tuples. > > - A third solution to the const shared_ptr problem (see > http://language-binding.net/pyplusplus/troubleshooting_guide/shared_ptr/shared_ptr.html) > that isn't evil (I don't think) and doesn't involve changing the > Boost.Python library itself - it simply doesn't use register_ptr_to_python to > register the conversion. > > More info is available in the README file. > > Also, I'm sure many of the regulars on this list have their own similar > extensions, and I'd love to see them collected in one place. If you'd like > to add your collection to mine, or have a suggestion for some other place I > should put my collection, please let me know. I would like to limit this > collection to simple things that don't depend on non-Boost libraries, however. > > > Jim Bosch > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > http://mail.python.org/mailman/listinfo/cplusplus-sig _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig