- :mod:`tabnanny`
- :mod:`tkinter.font`
- :mod:`tkinter.ttk`
+ - :mod:`zlib`
- (Contributed by Hugo van Kemenade in :gh:`76007`.)
+ (Contributed by Hugo van Kemenade and Stan Ulbrych in :gh:`76007`.)
.. Add deprecations above alphabetically, not here at the end.
return 100
+class TestModule(unittest.TestCase):
+ def test_deprecated__version__(self):
+ with self.assertWarnsRegex(
+ DeprecationWarning,
+ "'__version__' is deprecated and slated for removal in Python 3.20",
+ ) as cm:
+ getattr(zlib, "__version__")
+ self.assertEqual(cm.filename, __file__)
+
+
if __name__ == "__main__":
unittest.main()
return crc32_combine(crc1, crc2, len);
}
+static PyObject *
+zlib_getattr(PyObject *self, PyObject *args)
+{
+ PyObject *name;
+ if (!PyArg_UnpackTuple(args, "__getattr__", 1, 1, &name)) {
+ return NULL;
+ }
+
+ if (PyUnicode_Check(name) && PyUnicode_EqualToUTF8(name, "__version__")) {
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "'__version__' is deprecated and slated for removal in Python 3.20",
+ 1) < 0) {
+ return NULL;
+ }
+ return PyUnicode_FromString("1.0");
+ }
+
+ PyErr_Format(PyExc_AttributeError, "module 'zlib' has no attribute %R", name);
+ return NULL;
+}
+
static PyMethodDef zlib_methods[] =
{
ZLIB_ADLER32_METHODDEF
ZLIB_CRC32_COMBINE_METHODDEF
ZLIB_DECOMPRESS_METHODDEF
ZLIB_DECOMPRESSOBJ_METHODDEF
+ {"__getattr__", zlib_getattr, METH_VARARGS, "Module __getattr__"},
{NULL, NULL}
};
return -1;
}
#endif
- if (PyModule_AddStringConstant(mod, "__version__", "1.0") < 0) {
- return -1;
- }
return 0;
}