mirror of https://github.com/python/cpython
[3.11] gh-93741: Add private C API _PyImport_GetModuleAttrString() (GH-93742) (GH-93792)
It combines PyImport_ImportModule() and PyObject_GetAttrString()
and saves 4-6 lines of code on every use.
Add also _PyImport_GetModuleAttr() which takes Python strings as arguments.
(cherry picked from commit 6fd4c8ec77
)
This commit is contained in:
parent
02ff1ccfb7
commit
d42b3689f4
|
@ -40,3 +40,6 @@ struct _frozen {
|
||||||
collection of frozen modules: */
|
collection of frozen modules: */
|
||||||
|
|
||||||
PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
|
PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyObject *) _PyImport_GetModuleAttr(PyObject *, PyObject *);
|
||||||
|
PyAPI_DATA(PyObject *) _PyImport_GetModuleAttrString(const char *, const char *);
|
||||||
|
|
|
@ -2632,6 +2632,37 @@ PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
|
||||||
return PyImport_ExtendInittab(newtab);
|
return PyImport_ExtendInittab(newtab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
_PyImport_GetModuleAttr(PyObject *modname, PyObject *attrname)
|
||||||
|
{
|
||||||
|
PyObject *mod = PyImport_Import(modname);
|
||||||
|
if (mod == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
PyObject *result = PyObject_GetAttr(mod, attrname);
|
||||||
|
Py_DECREF(mod);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
_PyImport_GetModuleAttrString(const char *modname, const char *attrname)
|
||||||
|
{
|
||||||
|
PyObject *pmodname = PyUnicode_FromString(modname);
|
||||||
|
if (pmodname == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
PyObject *pattrname = PyUnicode_FromString(attrname);
|
||||||
|
if (pattrname == NULL) {
|
||||||
|
Py_DECREF(pmodname);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
PyObject *result = _PyImport_GetModuleAttr(pmodname, pattrname);
|
||||||
|
Py_DECREF(pattrname);
|
||||||
|
Py_DECREF(pmodname);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue