[Python-Dev] Changing Clinic's output (original) (raw)

Larry Hastings larry at hastings.org
Wed Jan 8 16:46:21 CET 2014


On 01/08/2014 07:33 AM, Brett Cannon wrote:

So let's make this idea concrete to focus a possible discussion. Using the example from the Clinic HOWTO and converting to how I see it working: [...]

Yep. And what I was proposing is much the same, except there are a couple extra lines in the "generated code" section. I'd keep the #define for the methoddef there, and add a prototype for the generated parsing function (_pickle_Pickler_dump) and the docstring.

####################

/*[clinic input] pickle.Pickler.dump

 obj: 'O'
     The object to be pickled.
 /

Write a pickled representation of obj to the open file. [clinic start generated code]*/ PyDoc_VAR(pickle_Pickler_dump__doc__);

static PyObject * _pickle_Pickler_dump(PyObject *args);

#define _PICKLE_PICKLER_DUMP_METHODDEF
{"dump", (PyCFunction)pickle_Pickler_dump, METH_O, pickle_Pickler_dump__doc},

static PyObject * pickle_Pickler_dump_impl(PyObject self, PyObject obj) /[clinic end generated code: checksum=3bd30745bf206a48f8b576a1da3d90f55a0a4187]/ { /* Check whether the Pickler was initialized correctly (issue3664). Developers often forget to call init() in their subclasses, which would trigger a segfault without this check. */ ... }

Another potential perk of doing a gathering of Clinic output is that if we take it to it's logical conclusion, then you can start to do things like define a method like pickle.Pickler.init, etc., have Clinic handle docstrings for modules and classes, and then it can end up spitting out the type struct entirely for you, negating the typical need to do all of that by hand (I don't know about the rest of you but I always just copy and paste that struct anyway, so having a tool slot in the right method names for the right positions would save me busy work).

Surely new code should use the functional API for creating types?
Anyway, yes, in the future it would be nice to get rid of a bunch of the busywork associated with implementing a Python builtin type, and Argument Clinic could definitely help with that.

//arry/ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20140108/678e5ca4/attachment-0001.html>



More information about the Python-Dev mailing list