[Python-Dev] subclassing PyCFunction_Type

2005-02-16 Thread Nick Rasmussen
tommy said that this would be the best place to ask
this question

I'm trying to get functions wrapped via boost to show
up as builtin types so that pydoc includes them when
documenting the module containing them.  Right now
boost python functions are created using a PyTypeObject
such that when inspect.isbuiltin does:

return isinstance(object, types.BuiltinFunctionType)

isintance returns 0.

Initially I had just modified a local pydoc to document all
functions with unknown source modules (since the module can't
be deduced from non-python functions), but I figured that
the right fix was to get boost::python functions to correctly
show up as builtins, so I tried setting PyCFunction_Type as the
boost function type object's tp_base, which worked fine for me
using linux on amd64, but when my patch was tried out on other
platforms, it ran into regression test failures:

http://mail.python.org/pipermail/c++-sig/2005-February/008545.html

So I have some questions:

Should boost::python functions be modified in some way to show
up as builtin function types or is the right fix really to patch
pydoc?

Is PyCFunction_Type intended to be subclassable?  I noticed that
it does not have Py_TPFLAGS_BASETYPE set in its tp_flags.  Also,
PyCFunction_Type has Py_TPFLAGS_HAVE_GC, and as the assertion failures
in the testsuite seemed to be centered around object allocation/
garbage collection, so is there something related to subclassing a
gc-aware class that needs to be happening (currently the boost type
object doesn't support garbage collection).

If subclassing PyCFunction_Type isn't the right way to make these
functions be considered as builtin functions, what is?

-nick


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] subclassing PyCFunction_Type

2005-02-17 Thread Nick Rasmussen
On Wed, 16 Feb 2005, Bob Ippolito wrote:

> 
> On Feb 16, 2005, at 11:02, Phillip J. Eby wrote:
> 
> >At 02:32 PM 2/11/05 -0800, Nick Rasmussen wrote:
> >>tommy said that this would be the best place to ask
> >>this question
> >>
> >>I'm trying to get functions wrapped via boost to show
> >>up as builtin types so that pydoc includes them when
> >>documenting the module containing them.  Right now
> >>boost python functions are created using a PyTypeObject
> >>such that when inspect.isbuiltin does:
> >>
> >>return isinstance(object, types.BuiltinFunctionType)
> >
> >FYI, this may not be the "right" way to do this, but since 2.3 
> >'isinstance()' looks at an object's __class__ rather than its type(), 
> >so you could perhaps include a '__class__' descriptor in your method 
> >type that returns BuiltinFunctionType and see if that works.
> >
> >It's a kludge, but it might let your code work with existing versions 
> >of Python.
> 
> It works in Python 2.3.0:
> 

That seemed to do the trick for me as well, I'll run it past
the boost::python folks and see what they think.

many thanks

-nick

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com