classification
Title: Many method parameters in the datetime module are positional-only in the C implementation but positional-or-keyword in the Python implementation
Type: behavior Stage:
Components: Extension Modules, Library (Lib) Versions: Python 3.11, Python 3.10, Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: AlexWaygood, belopolsky, p-ganssle
Priority: normal Keywords:

Created on 2021-11-16 19:21 by AlexWaygood, last changed 2021-11-21 13:45 by AlexWaygood.

Messages (3)
msg406423 - (view) Author: Alex Waygood (AlexWaygood) * Date: 2021-11-16 19:21
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.
msg406592 - (view) Author: Alex Waygood (AlexWaygood) * Date: 2021-11-19 16:18
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.
msg406715 - (view) Author: Alex Waygood (AlexWaygood) * Date: 2021-11-21 13:45
Ref to discussion on typeshed: https://github.com/python/typeshed/pull/6343
History
Date User Action Args
2021-11-21 13:45:40AlexWaygoodsetmessages: + msg406715
2021-11-19 16:18:39AlexWaygoodsetmessages: + msg406592
2021-11-16 19:21:08AlexWaygoodcreate