You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Derby #8: Convert 28 sites to Argument Clinic across 2 files #64376
This issue is part of the Great Argument Clinic Conversion Derby,
where we're trying to convert as much of Python 3.4 to use
Argument Clinic as we can before Release Candidate 1 on January 19.
changed the title [-]Derby #8: Convert 52 sites to Argument Clinic across 3 files[/-][+]Derby #8: Convert 28 sites to Argument Clinic across 2 files[/+]on Jan 8, 2014
nikratio commented on Jan 18, 2014
nikratiomannequin
Mannequin
More actions
I have started working on this (partial patch attached), but I am unsure how to handle cases where the docstring definition utilizes a macro. For example:
PyDoc_STRVAR(strftime_doc,
"strftime(format[, tuple]) -> string\n\
\n\
Convert a time tuple to a string according to a format specification.\n\
See the library reference manual for formatting codes. When the time tuple\n\
is not present, current time as returned by localtime() is used.\n\
\n" STRFTIME_FORMAT_CODES);
I don't think STRFTIME_FORMAT_CODES will be expanded if I put it into the [clinic] comment section.
Should I include the contents verbatim? Or do not convert these functions to argument clinic?
Yes, you should drop things that look like return annotations in the original docstring.
I don't have a magic formula for finding unchanged functions, sorry.
nikratio commented on Jan 19, 2014
nikratiomannequin
Mannequin
More actions
Here is a patch for timemodule.c. I have converted everything except:
ctime() uses the gettmarg() function. Converting gettmarg() itself doesn't seem possible to me (because it's not Python callable), and duplicating the functionality in a single complicated clinic section just for ctime() did not seem reasonable either.
gmtime(), localtime(), ctime() use a the parse_time_t_args() utility function. I have not yet figured out how to replace this with argument clinic (sent a mail to python-dev about that).
nikratio commented on Jan 19, 2014
nikratiomannequin
Mannequin
More actions
Hmm. After reading some of the threads on python-dev, I'm now confused if I did the conversion of optional arguments correctly.
Should something like "strftime(format[, tuple])" be converted using optional groups, or should tuple become a parameter with a default value? (so far, I have done the latter).
2 remaining items
nikratio commented on Jan 25, 2014
nikratiomannequin
Mannequin
More actions
(I already sent this to python-dev, but maybe it makes more sense to have these thoughts together with the patch)
After looking at the conversion of parse_time_t_args again, I think I lost track of what we're actually gaining with this procedure. If all we need is a type that can distinguish between a valid time_t value and a default value, why don't we simply use PyObject?
In other words, what's the advantage of the extra custom strict, plus the custom C converter function, plus the custom converter python class over:
I've attached updated patches to reflect the recent changes in the derby policy.
part1 is the part of the patch that is suitable for 3.4.
part2 are the changes that have to wait for 3.5 (mostly because of default values).
nikratio commented on Jan 26, 2014
nikratiomannequin
Mannequin
More actions
I'll wait with working on _datetimemodule.c until someone had a chance to look over my _timemodule.c patch. (I want to make sure I'm following the right procedure).
Regarding the handling of time_t arguments which can be None, I agree that the second version (without custom convertors) is simpler and clearer while having no disadvantage that I can see.
I'd like to review the rest of the patches, but you mention changes to the AC policy regarding 3.4 and 3.5 and I can't find a reference to these changes or to the new policy.
Activity
larryhastings commentedon Jan 7, 2014
This issue is part of the Great Argument Clinic Conversion Derby,
where we're trying to convert as much of Python 3.4 to use
Argument Clinic as we can before Release Candidate 1 on January 19.
This issue asks you to change the following bundle of files:
Modules/_datetimemodule.c: 20 sites
Modules/timemodule.c: 8 sites
Modules/_decimal/_decimal.c: 24 sites
Talk to me (larry) if you only want to attack part of a bundle.
For instructions on how to convert a function to work with Argument
Clinic, read the "howto":
http://docs.python.org/dev/howto/clinic.html
skrah commentedon Jan 8, 2014
Please take out _decimal.c. It has a huge test suite that would break entirely.
larryhastings commentedon Jan 8, 2014
Absolutely. decimal is a very special case.
Whoever takes over this issue: please ignore the part about _decimal.c.
[-]Derby #8: Convert 52 sites to Argument Clinic across 3 files[/-][+]Derby #8: Convert 28 sites to Argument Clinic across 2 files[/+]nikratio commentedon Jan 18, 2014
I have started working on this (partial patch attached), but I am unsure how to handle cases where the docstring definition utilizes a macro. For example:
PyDoc_STRVAR(strftime_doc,
"strftime(format[, tuple]) -> string\n\
\n\
Convert a time tuple to a string according to a format specification.\n\
See the library reference manual for formatting codes. When the time tuple\n\
is not present, current time as returned by localtime() is used.\n\
\n" STRFTIME_FORMAT_CODES);
I don't think STRFTIME_FORMAT_CODES will be expanded if I put it into the [clinic] comment section.
Should I include the contents verbatim? Or do not convert these functions to argument clinic?
larryhastings commentedon Jan 18, 2014
That macro, STRFTIME_FORMAT_CODES, is only used in two functions. If it were me I'd just copy and paste the text into both functions.
nikratio commentedon Jan 18, 2014
Will do. Another question: what should I do with return annotations, e.g. the "-> dict" part in
"get_clock_info(name: str) -> dict\n
Should I drop that part? In the clinic howto, I couldn't find anything about return annotations (only that parameter annotations are unsupported).
nikratio commentedon Jan 18, 2014
One more question: what's a good way to find sites that need changes? Searching for "PyArg_" finds both converted and unconverted functions...
larryhastings commentedon Jan 18, 2014
Yes, you should drop things that look like return annotations in the original docstring.
I don't have a magic formula for finding unchanged functions, sorry.
nikratio commentedon Jan 19, 2014
Here is a patch for timemodule.c. I have converted everything except:
ctime() uses the gettmarg() function. Converting gettmarg() itself doesn't seem possible to me (because it's not Python callable), and duplicating the functionality in a single complicated clinic section just for ctime() did not seem reasonable either.
gmtime(), localtime(), ctime() use a the parse_time_t_args() utility function. I have not yet figured out how to replace this with argument clinic (sent a mail to python-dev about that).
nikratio commentedon Jan 19, 2014
Hmm. After reading some of the threads on python-dev, I'm now confused if I did the conversion of optional arguments correctly.
Should something like "strftime(format[, tuple])" be converted using optional groups, or should tuple become a parameter with a default value? (so far, I have done the latter).
2 remaining items
nikratio commentedon Jan 25, 2014
(I already sent this to python-dev, but maybe it makes more sense to have these thoughts together with the patch)
After looking at the conversion of parse_time_t_args again, I think I lost track of what we're actually gaining with this procedure. If all we need is a type that can distinguish between a valid time_t value and a default value, why don't we simply use PyObject?
In other words, what's the advantage of the extra custom strict, plus the custom C converter function, plus the custom converter python class over:
/*[clinic input]
time.gmtime
[...]
[...]
To me this version looks shorter and clearer.
nikratio commentedon Jan 26, 2014
I've attached updated patches to reflect the recent changes in the derby policy.
part1 is the part of the patch that is suitable for 3.4.
part2 are the changes that have to wait for 3.5 (mostly because of default values).
nikratio commentedon Jan 26, 2014
I'll wait with working on _datetimemodule.c until someone had a chance to look over my _timemodule.c patch. (I want to make sure I'm following the right procedure).
taleinat commentedon May 16, 2014
Regarding the handling of time_t arguments which can be None, I agree that the second version (without custom convertors) is simpler and clearer while having no disadvantage that I can see.
I'd like to review the rest of the patches, but you mention changes to the AC policy regarding 3.4 and 3.5 and I can't find a reference to these changes or to the new policy.
nikratio commentedon May 24, 2014
Tal, I was referring to this mail: https://mail.python.org/pipermail/python-dev/2014-January/132066.html
larryhastings commentedon Aug 4, 2014
All the Derby patches should only go into trunk at this point.
serhiy-storchaka commentedon Feb 21, 2019
The modern workflow requires creating a PR on GitHub. Nikolaus, do you mind to convert your patch to a PR?
nikratio commentedon Feb 25, 2019
Sorry, no. I have long lost context and interest in this.
ZackerySpytz commentedon Jun 22, 2019
I have created a PR for Modules/timemodule.c.