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
Many method parameters in the datetime module are positional-only in the C implementation but positional-or-keyword in the Python implementation #89979
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2021-11-16.19:21:08.113>labels= ['type-bug', '3.9', '3.10', '3.11', 'extension-modules', 'library']
title='Many method parameters in the datetime module are positional-only in the C implementation but positional-or-keyword in the Python implementation'updated_at=<Date2021-11-21.13:45:40.155>user='https://github.com/AlexWaygood'
The following methods have parameters that are positional-only in the C implementation of the datetime module, but positional-or-keyword in the pure-Python implementation:
tzinfo.tzname
tzinfo.utcoffset
tzinfo.dst
tzinfo.fromutc
date.fromordinal
date.fromisoformat
date.__format__
date.__le__
date.__lt__
date.__ge__
date.__gt__
date.__add__
date.__radd__
date.__sub__
date.__reduce_ex__
time.__le__
time.__lt__
time.__ge__
time.__gt__
time.fromisoformat
time.__format__
timedelta.__add__
timedelta.__radd__
timedelta.__sub__
timedelta.__rsub__
timedelta.__mul__
timedelta.__rmul__
timedelta.__floordiv__
timedelta.__truediv__
timedelta.__mod__
timedelta.__divmod__
timedelta.__le__
timedelta.__lt__
timedelta.__ge__
timedelta.__gt__
datetime.utcfromtimestamp
datetime.fromisoformat
datetime.strptime
datetime.__le__
datetime.__lt__
datetime.__ge__
datetime.__gt__
These inconsistencies make it extremely difficult to provide an accurate stub for these methods in typeshed.
It seems to me that there are two ways of resolving this:
(1) Change the Python implementation to match the C implementation (make these parameters positional-only in the Python implementation).
(2) Change the C implementation to match the Python implementation (make these parameters positional-or-keyword in the C implementation).
If the decision is that solution (1) is the way to go, I'd be happy to submit a PR fixing this. If the decision is that solution (2) would be better, however, I'm not confident enough with writing C code to submit a PR.
The C implementation is most widely used, so I think strategy (1) would not have too many backwards-compatibility concerns. Strategy (2) is still probably slightly more backwards-compatible, however.
I would say (1) is fine (with no backporting) as I doubt there are many use cases for using the Python implementation over the much faster C. I can implement one (or two I guess, using clinic for just a few functions is also not the nicest imo)
Activity
AlexWaygood commentedon Nov 16, 2021
The following methods have parameters that are positional-only in the C implementation of the
datetimemodule, but positional-or-keyword in the pure-Python implementation:These inconsistencies make it extremely difficult to provide an accurate stub for these methods in typeshed.
AlexWaygood commentedon Nov 19, 2021
It seems to me that there are two ways of resolving this:
(1) Change the Python implementation to match the C implementation (make these parameters positional-only in the Python implementation).
(2) Change the C implementation to match the Python implementation (make these parameters positional-or-keyword in the C implementation).
If the decision is that solution (1) is the way to go, I'd be happy to submit a PR fixing this. If the decision is that solution (2) would be better, however, I'm not confident enough with writing C code to submit a PR.
The C implementation is most widely used, so I think strategy (1) would not have too many backwards-compatibility concerns. Strategy (2) is still probably slightly more backwards-compatible, however.
AlexWaygood commentedon Nov 21, 2021
Ref to discussion on typeshed: python/typeshed#6343
StanFromIreland commentedon Mar 9, 2025
I would say (1) is fine (with no backporting) as I doubt there are many use cases for using the Python implementation over the much faster C. I can implement one (or two I guess, using clinic for just a few functions is also not the nicest imo)
serhiy-storchaka commentedon Jul 7, 2025
I support solution (1). We can add support for keyword arguments later if they are useful. See also #135312.
@AlexWaygood, do you prefer to create PR yourself or leave it to others?
AlexWaygood commentedon Jul 7, 2025
I'm somewhat stretched for time right now — I probably won't have time to make a PR myself any time soon :-)