On May 10, 2013, at 11:10 , Wichert Akkerman <wich...@wiggy.net> wrote: > On May 9, 2013, at 12:34 , Alex Leach <beamesle...@gmail.com> wrote: >> On Thu, 09 May 2013 07:55:07 +0100, Wichert Akkerman <wich...@wiggy.net> >> wrote: >> >> On May 8, 2013, at 23:31 , "Alex Leach" <beamesle...@gmail.com> wrote: >> >>> That error means the type_id of uuid is not in the bp registry. >>> >>> I think you can fix this by deriving uuid_to_python from >>> to_python_converter, as demonstrated in the pytype_function example[1]. >>> This will add the get_pytype function call, and on initialisation, should >>> hopefully add what's missing: a call to `registry::lookup`[2]. >> >> I'm afraid that doesn't work. To test this I changes my converter struct to >> derive from bp::converter::wrap_pyttype<&PyStringType> and pass >> has_get_type=true to the to_python_converter call, but I still get the exact >> same error. >> >> Fair enough. I see your conversion function doesn't use bp::object, but a >> raw PyObject instead. Using a bp::object might do the registration for >> you.. Probably not. Alternatively, you could try adding this to your >> registration code:- >> >> >> converter::registration& uuid_converter >> = const_cast<converter::registration&>( >> converter::registry::lookup(type_id<boost::uuids::uuid>()) ); >> >> uuid_converter.m_class_object = >> # if PY_VERSION_HEX >= 0x03000000 >> &PyUnicode_Type; >> #else >> &PyString_Type; >> #endif >> >> >> That will get you past the current error, at least, but there's probably an >> easier solution… > > That seems to do something! But still not quite there: > > >>> a.uuid > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: cannot create weak reference to 'str' object > >>> u=a.uuid > zsh: segmentation fault
Which can be fixed by not using def_readwrite but a property with a getting returning a new value instead of a reference: .add_property("uuid", bp::make_getter(&Article::uuid, bp::return_value_policy<bp::return_by_value>()), bp::make_setter(&Article::uuid)) After which everything seems to work! Wichert.
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig