bpo-41025: Fix subclassing for zoneinfo.ZoneInfo (GH-20965) (GH-21876)

Prior to this change, attempting to subclass the C implementation of
zoneinfo.ZoneInfo gave the following error:

    TypeError: unbound method ZoneInfo.__init_subclass__() needs an argument

https://bugs.python.org/issue41025
(cherry picked from commit 87d8287865)

Co-authored-by: Paul Ganssle <paul@ganssle.io>
This commit is contained in:
Miss Islington (bot) 2020-08-14 08:18:24 -07:00 committed by GitHub
parent 7c288413db
commit 33d3c64095
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 3 deletions

View file

@ -462,7 +462,7 @@ class CZoneInfoDatetimeSubclassTest(DatetimeSubclassMixin, CZoneInfoTest):
pass
class ZoneInfoTestSubclass(ZoneInfoTest):
class ZoneInfoSubclassTest(ZoneInfoTest):
@classmethod
def setUpClass(cls):
super().setUpClass()
@ -483,7 +483,7 @@ class ZoneInfoTestSubclass(ZoneInfoTest):
self.assertIsInstance(sub_obj, self.klass)
class CZoneInfoTestSubclass(ZoneInfoTest):
class CZoneInfoSubclassTest(ZoneInfoSubclassTest):
module = c_zoneinfo

View file

@ -0,0 +1,2 @@
Fixed an issue preventing the C implementation of :class:`zoneinfo.ZoneInfo`
from being subclassed.

View file

@ -2557,7 +2557,7 @@ static PyMethodDef zoneinfo_methods[] = {
{"_unpickle", (PyCFunction)zoneinfo__unpickle, METH_VARARGS | METH_CLASS,
PyDoc_STR("Private method used in unpickling.")},
{"__init_subclass__", (PyCFunction)(void (*)(void))zoneinfo_init_subclass,
METH_VARARGS | METH_KEYWORDS,
METH_VARARGS | METH_KEYWORDS | METH_CLASS,
PyDoc_STR("Function to initialize subclasses.")},
{NULL} /* Sentinel */
};