From 522267e7845becb76e0e1cbaa875ad0da9fd58cc Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Fri, 10 Aug 2012 18:55:08 -0400 Subject: [PATCH] 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. --- Doc/c-api/import.rst | 6 ++++-- Doc/whatsnew/3.3.rst | 5 +++++ Include/import.h | 2 +- Misc/NEWS | 3 +++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst index c7180578dda..c3c8f42cf01 100644 --- a/Doc/c-api/import.rst +++ b/Doc/c-api/import.rst @@ -44,8 +44,7 @@ Importing Modules .. index:: builtin: __import__ Import a module. This is best described by referring to the built-in Python - function :func:`__import__`, as the standard :func:`__import__` function calls - this function directly. + function :func:`__import__`. 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 @@ -76,6 +75,9 @@ Importing Modules Similar to :c:func:`PyImport_ImportModuleLevelObject`, but the name is an 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) This is a higher-level interface that calls the current "import hook diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst index 858fce8de4e..a64424d324e 100644 --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -1880,6 +1880,11 @@ Porting C code * :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 --------------------- diff --git a/Include/import.h b/Include/import.h index bc21ae2f478..fdc27336c35 100644 --- a/Include/import.h +++ b/Include/import.h @@ -62,7 +62,7 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( ); #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_Import(PyObject *name); diff --git a/Misc/NEWS b/Misc/NEWS index 6abe3cb4f41..972e769c05a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -237,6 +237,9 @@ Library C API ----- +- Issue #15610: PyImport_ImportModuleEx() now uses a 'level' of 0 instead of + -1. + - Issues #15169, #14599: Strip out the C implementation of imp.source_from_cache() used by PyImport_ExecCodeModuleWithPathnames() and used the Python code instead. Leads to PyImport_ExecCodeModuleObject() to not