Using argument clinic to replace timemodule.c:parse_time_t_args()
Hello, I'm trying to convert functions using parse_time_t_args() (from timemodule.c) for argument parsing to argument clinic. The function is defined as: ,---- | static int | parse_time_t_args(PyObject *args, char *format, time_t *pwhen) | { | PyObject *ot = NULL; | time_t whent; | | if (!PyArg_ParseTuple(args, format, &ot)) | return 0; | if (ot == NULL || ot == Py_None) { | whent = time(NULL); | } | else { | if (_PyTime_ObjectToTime_t(ot, &whent) == -1) | return 0; | } | *pwhen = whent; | return 1; | } `---- and used like this: ,---- | static PyObject * | time_localtime(PyObject *self, PyObject *args) | { | time_t when; | struct tm buf; | | if (!parse_time_t_args(args, "|O:localtime", &when)) | return NULL; | if (pylocaltime(&when, &buf) == -1) | return NULL; | return tmtotuple(&buf); | } `---- In other words, if any Python object is passed to it, it calls _PyTime_ObjectToTime_t on it to convert it to time_t, and otherwise uses time(NULL) as the default value. May first attempt to implement something similar in argument clinic was: ,---- | /*[python input] | class time_t_converter(CConverter): | type = 'time_t' | converter = 'time_t_converter' | default = None | py_default = 'None' | c_default = 'time(NULL)' | converter = '_PyTime_ObjectToTime_t' | [python start generated code]*/ | | /*[clinic input] | time.localtime | | seconds: time_t | / | | bla. | [clinic start generated code]*/ `---- However, running clinic.py on this file gives: ,---- | $ Tools/clinic/clinic.py Modules/timemodule.c | Error in file "Modules/timemodule.c" on line 529: | Exception raised during parsing: | Traceback (most recent call last): | File "Tools/clinic/clinic.py", line 1445, in parse | parser.parse(block) | File "Tools/clinic/clinic.py", line 2738, in parse | self.state(None) | File "Tools/clinic/clinic.py", line 3468, in state_terminal | self.function.docstring = self.format_docstring() | File "Tools/clinic/clinic.py", line 3344, in format_docstring | s += "".join(a) | TypeError: sequence item 2: expected str instance, NoneType found `---- What am I doing wrong? Best, Nikolaus -- Encrypted emails preferred. PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C »Time flies like an arrow, fruit flies like a Banana.«
participants (4)
-
Larry Hastings
-
Nikolaus Rath
-
Ryan Smith-Roberts
-
Serhiy Storchaka