gh-128911: Add PyImport_ImportModuleAttr() function (#128912)

Add PyImport_ImportModuleAttr() and
PyImport_ImportModuleAttrString() functions.

* Add unit tests.
* Replace _PyImport_GetModuleAttr()
  with PyImport_ImportModuleAttr().
* Replace _PyImport_GetModuleAttrString()
  with PyImport_ImportModuleAttrString().
* Remove "pycore_import.h" includes, no longer needed.
This commit is contained in:
Victor Stinner 2025-01-30 12:17:29 +01:00 committed by GitHub
parent f927204f64
commit 3bebe46d34
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
40 changed files with 194 additions and 56 deletions

View file

@ -4111,7 +4111,7 @@ init_zipimport(PyThreadState *tstate, int verbose)
PySys_WriteStderr("# installing zipimport hook\n");
}
PyObject *zipimporter = _PyImport_GetModuleAttrString("zipimport", "zipimporter");
PyObject *zipimporter = PyImport_ImportModuleAttrString("zipimport", "zipimporter");
if (zipimporter == NULL) {
_PyErr_Clear(tstate); /* No zipimporter object -- okay */
if (verbose) {
@ -4174,7 +4174,7 @@ _PyImport_FiniExternal(PyInterpreterState *interp)
/******************/
PyObject *
_PyImport_GetModuleAttr(PyObject *modname, PyObject *attrname)
PyImport_ImportModuleAttr(PyObject *modname, PyObject *attrname)
{
PyObject *mod = PyImport_Import(modname);
if (mod == NULL) {
@ -4186,7 +4186,7 @@ _PyImport_GetModuleAttr(PyObject *modname, PyObject *attrname)
}
PyObject *
_PyImport_GetModuleAttrString(const char *modname, const char *attrname)
PyImport_ImportModuleAttrString(const char *modname, const char *attrname)
{
PyObject *pmodname = PyUnicode_FromString(modname);
if (pmodname == NULL) {
@ -4197,7 +4197,7 @@ _PyImport_GetModuleAttrString(const char *modname, const char *attrname)
Py_DECREF(pmodname);
return NULL;
}
PyObject *result = _PyImport_GetModuleAttr(pmodname, pattrname);
PyObject *result = PyImport_ImportModuleAttr(pmodname, pattrname);
Py_DECREF(pattrname);
Py_DECREF(pmodname);
return result;

View file

@ -2609,7 +2609,7 @@ create_stdio(const PyConfig *config, PyObject* io,
#ifdef HAVE_WINDOWS_CONSOLE_IO
/* Windows console IO is always UTF-8 encoded */
PyTypeObject *winconsoleio_type = (PyTypeObject *)_PyImport_GetModuleAttr(
PyTypeObject *winconsoleio_type = (PyTypeObject *)PyImport_ImportModuleAttr(
&_Py_ID(_io), &_Py_ID(_WindowsConsoleIO));
if (winconsoleio_type == NULL) {
goto error;
@ -2714,7 +2714,7 @@ init_set_builtins_open(void)
goto error;
}
if (!(wrapper = _PyImport_GetModuleAttrString("io", "open"))) {
if (!(wrapper = PyImport_ImportModuleAttrString("io", "open"))) {
goto error;
}