Writing a CPython extension - calling another sibbling method ?

R.Wieser address at not.available
Tue Nov 19 12:12:35 EST 2019


Michael,

> Sure but the Python methods* themselves are exposed and accessible
> and according to your previous posts, all you want to do is add an
> argument to a call to the existing method.  If that's true, then you
> should be able to do that part from pure Python.

>* class methods defined by the C code

Feel free to post code showing that it can be done.   The extension is
RPi.GPIO, the method is "output", and the extra argument is the pinnaming
scheme (BCM or BOARD).   Success! :-p

> I can understand that the pure C stuff is not accessible of course.
> But the snippets you've shown so far don't show any of that.

Where did you think that "static PyObject *py_proc1(PyObject *self, PyObject
*args)" came from, or why I said "I've also tried to go the C way" ?
Besides that, the subject line should have been a dead giveaway by
itself ...

> We're working in the dark here

Are you sure ?   MRAB didn't seem to have too much problems with both
recognising and understanding what I was busy with - he posted a spot-on
example, containing not more, but also not anything less than what I was
asking for.

> Looking at existing examples, as well as the C API documentation

I did not find any example that showed me what I needed to know - simply one
CPython function calling another one.    And yes, I've found multiple
documentation pages, including the "Extending and Embedding the Python
Interpreter" ones.  Alas, no dice.

Most of that documentation is only good when you already know what you are
looking for, and need to make sure of its exact usage.  Not so much the
other way around, when you have no clue and are searching for what you need
to use to solve a particular problem (even one as stupid as just calling
another method)


By the way, the whole solution consists outof the following:

static PyObject *py_proc1(PyObject *self, int ExtraArg, PyObject *args)
{
....
  Py_RETURN_NONE
}

static PyObject *py_proc2(PyObject *self, PyObject *args)
{
   return py_proc1(self, 42, args)
}

Regards,
Rudy Wieser






More information about the Python-list mailing list