From 8dcc2e8975943da6db6551742856678f92eb19e8 Mon Sep 17 00:00:00 2001 From: Rodrigo Tobar Date: Wed, 7 Aug 2024 20:15:07 +0800 Subject: [PATCH] Drop support for Python 2.7 The ship has long sailed, and while we could even restrict Python version support further, the module itself uses few and stable function calls that haven't changed throughout the Python 3 series. Signed-off-by: Rodrigo Tobar --- CHANGELOG.md | 1 + setup.py | 2 +- src/crc32c/ext/_crc32c.c | 34 ++++++++-------------------------- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1311265..ae3dfae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ for clarity, and to avoid potential warnings (#46). * Run test against different memory alignments. * Mention explicit support for Python 3.13. +* Drop support for Python 2.7. ## [2.4.1] diff --git a/setup.py b/setup.py index 0d5d403..ab8c72e 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,6 @@ "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)", "Operating System :: OS Independent", "Programming Language :: C", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", @@ -67,6 +66,7 @@ classifiers=classifiers, packages=['crc32c'], package_dir={'': 'src'}, + python_requires=">=3.2", include_package_data=True, ext_modules=[crcmod_ext], test_suite="test") diff --git a/src/crc32c/ext/_crc32c.c b/src/crc32c/ext/_crc32c.c index c069cd6..58fd32c 100644 --- a/src/crc32c/ext/_crc32c.c +++ b/src/crc32c/ext/_crc32c.c @@ -56,13 +56,7 @@ PyObject* crc32c_crc32c(PyObject *self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = {"data", "value", "gil_release_mode", NULL}; /* In python 3 we accept only bytes-like objects */ - const char *format = -#if PY_MAJOR_VERSION >= 3 - "y*" -#else - "s*" -#endif - "|Ii:crc32"; + const char *format ="y*|Ii:crc32"; if (!PyArg_ParseTupleAndKeywords(args, kwargs, format, kwlist, &pbin, &crc, &gil_release_mode) ) return NULL; @@ -133,21 +127,9 @@ static const char *import_error_msg = "\n\n" " * 'force': use software implementation regardless of hardware support.\n" " * 'none': fail if no hardware support is found (this error).\n"; -/* Support for Python 2/3 */ -#if PY_MAJOR_VERSION >= 3 static struct PyModuleDef moduledef = {PyModuleDef_HEAD_INIT, "_crc32c", "crc32c implementation in hardware and software", -1, CRC32CMethods}; - #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) - #define MOD_DEF(m, name, doc, methods) \ - m = PyModule_Create(&moduledef); - #define MOD_VAL(v) v -#else - #define MOD_INIT(name) PyMODINIT_FUNC init##name(void) - #define MOD_DEF(m, name, doc, methods) \ - m = Py_InitModule3(name, methods, doc); - #define MOD_VAL(v) -#endif -MOD_INIT(_crc32c) +PyMODINIT_FUNC PyInit__crc32c(void) { PyObject *m; PyObject *hardware_based; @@ -178,21 +160,21 @@ MOD_INIT(_crc32c) } else if (sw_mode == NONE) { PyErr_SetString(PyExc_ImportError, import_error_msg); - return MOD_VAL(NULL); + return NULL; } is_big_endian = (*(const char *)(&n) == 0); - MOD_DEF(m, "_crc32c", "crc32c implementation in hardware and software", CRC32CMethods); + m = PyModule_Create(&moduledef); if (m == NULL) { - return MOD_VAL(NULL); + return NULL; } Py_INCREF(hardware_based); if (PyModule_AddObject(m, "hardware_based", hardware_based) < 0) { - return MOD_VAL(NULL); + return NULL; } if (PyModule_AddIntConstant(m, "big_endian", is_big_endian) < 0) { - return MOD_VAL(NULL); + return NULL; } - return MOD_VAL(m); + return m; }