Miscellaneous Boost.Python Utilities
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/shar...) 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
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 <talljimbo@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/shar...) 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
participants (2)
-
Brian O'Kennedy -
Jim Bosch