Issue #15610: The PyImport_ImportModuleEx macro now calls

PyImport_ImportModuleLevel() with a 'level' of 0 instead of -1 as the
latter is no longer a valid value.

Also added a versionchanged note for PyImport_ImportModuleLevel() just
in case people don't make the connection between changes to
__import__() and this C function.
This commit is contained in:
Brett Cannon 2012-08-10 18:55:08 -04:00
parent f410ce8c09
commit 522267e784
4 changed files with 13 additions and 3 deletions

View File

@ -44,8 +44,7 @@ Importing Modules
.. index:: builtin: __import__ .. index:: builtin: __import__
Import a module. This is best described by referring to the built-in Python Import a module. This is best described by referring to the built-in Python
function :func:`__import__`, as the standard :func:`__import__` function calls function :func:`__import__`.
this function directly.
The return value is a new reference to the imported module or top-level The return value is a new reference to the imported module or top-level
package, or *NULL* with an exception set on failure. Like for package, or *NULL* with an exception set on failure. Like for
@ -76,6 +75,9 @@ Importing Modules
Similar to :c:func:`PyImport_ImportModuleLevelObject`, but the name is an Similar to :c:func:`PyImport_ImportModuleLevelObject`, but the name is an
UTF-8 encoded string instead of a Unicode object. UTF-8 encoded string instead of a Unicode object.
.. versionchanged:: 3.3
Negative values for **level** are no longer accepted.
.. c:function:: PyObject* PyImport_Import(PyObject *name) .. c:function:: PyObject* PyImport_Import(PyObject *name)
This is a higher-level interface that calls the current "import hook This is a higher-level interface that calls the current "import hook

View File

@ -1880,6 +1880,11 @@ Porting C code
* :c:func:`PyImport_GetMagicNumber` now returns -1 upon failure. * :c:func:`PyImport_GetMagicNumber` now returns -1 upon failure.
* As a negative value for the **level** argument to :func:`__import__` is no
longer valid, the same now holds for :c:func:`PyImport_ImportModuleLevel`.
This also means that the value of **level** used by
:c:func:`PyImport_ImportModuleEx` is now 0 instead of -1.
Building C extensions Building C extensions
--------------------- ---------------------

View File

@ -62,7 +62,7 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
); );
#define PyImport_ImportModuleEx(n, g, l, f) \ #define PyImport_ImportModuleEx(n, g, l, f) \
PyImport_ImportModuleLevel(n, g, l, f, -1) PyImport_ImportModuleLevel(n, g, l, f, 0)
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);

View File

@ -237,6 +237,9 @@ Library
C API C API
----- -----
- Issue #15610: PyImport_ImportModuleEx() now uses a 'level' of 0 instead of
-1.
- Issues #15169, #14599: Strip out the C implementation of - Issues #15169, #14599: Strip out the C implementation of
imp.source_from_cache() used by PyImport_ExecCodeModuleWithPathnames() and imp.source_from_cache() used by PyImport_ExecCodeModuleWithPathnames() and
used the Python code instead. Leads to PyImport_ExecCodeModuleObject() to not used the Python code instead. Leads to PyImport_ExecCodeModuleObject() to not