summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Python
diff options
context:
space:
mode:
authorshadchin <[email protected]>2026-01-14 19:52:47 +0300
committershadchin <[email protected]>2026-01-14 20:30:18 +0300
commit078fd8aa66d488d1339cb64a5a3918e786b4baae (patch)
tree8f88c448cb861883216c644dae3d0fc3bdfbd993 /contrib/tools/python3/Python
parentd980d7a650f4a3cfe8d1b7f030847b03d5c511e4 (diff)
Fix `__name__` for builtin modules
Такой же подход есть у загрузки so-расширений, но для builtin его из коробки нет, так как builtin в upstream используется только для стандартной библиотеки, а там нет подпакетов, там только модули и у них нет проблемы с именем. До патча: ```ipython In [1]: import osgeo._gdal In [2]: osgeo._gdal.__name__ Out[2]: '_gdal' # <- Потерялось имя пакета, должно быть `osgeo._gdal` ``` После патча: ```ipython In [1]: import osgeo._gdal In [2]: osgeo._gdal.__name__ Out[2]: 'osgeo._gdal' ``` commit_hash:fee95110a58cae8395a46598bf8f0b80e42b029a
Diffstat (limited to 'contrib/tools/python3/Python')
-rw-r--r--contrib/tools/python3/Python/import.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/contrib/tools/python3/Python/import.c b/contrib/tools/python3/Python/import.c
index 8f8d5c25cb5..fe70169202c 100644
--- a/contrib/tools/python3/Python/import.c
+++ b/contrib/tools/python3/Python/import.c
@@ -1388,6 +1388,7 @@ is_builtin(PyObject *name)
static PyObject*
create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec)
{
+ const char *oldcontext, *newcontext;
PyObject *mod = import_find_extension(tstate, name, name);
if (mod || _PyErr_Occurred(tstate)) {
return mod;
@@ -1401,7 +1402,13 @@ create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec)
mod = PyImport_AddModuleObject(name);
return Py_XNewRef(mod);
}
+ newcontext = PyUnicode_AsUTF8(name);
+ if (newcontext == NULL) {
+ Py_RETURN_NONE;
+ }
+ oldcontext = _PyImport_SwapPackageContext(newcontext);
mod = _PyImport_InitFunc_TrampolineCall(*p->initfunc);
+ _PyImport_SwapPackageContext(oldcontext);
if (mod == NULL) {
return NULL;
}