mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-133644: remove deprecated PyImport_ImportModuleNoBlock
(#133655)
This commit is contained in:
parent
26839eae20
commit
a2c4467d06
17 changed files with 20 additions and 34 deletions
|
@ -16,19 +16,6 @@ Importing Modules
|
||||||
This is a wrapper around :c:func:`PyImport_Import()` which takes a
|
This is a wrapper around :c:func:`PyImport_Import()` which takes a
|
||||||
:c:expr:`const char *` as an argument instead of a :c:expr:`PyObject *`.
|
:c:expr:`const char *` as an argument instead of a :c:expr:`PyObject *`.
|
||||||
|
|
||||||
.. c:function:: PyObject* PyImport_ImportModuleNoBlock(const char *name)
|
|
||||||
|
|
||||||
This function is a deprecated alias of :c:func:`PyImport_ImportModule`.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.3
|
|
||||||
This function used to fail immediately when the import lock was held
|
|
||||||
by another thread. In Python 3.3 though, the locking scheme switched
|
|
||||||
to per-module locks for most purposes, so this function's special
|
|
||||||
behaviour isn't needed anymore.
|
|
||||||
|
|
||||||
.. deprecated-removed:: 3.13 3.15
|
|
||||||
Use :c:func:`PyImport_ImportModule` instead.
|
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: PyObject* PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
|
.. c:function:: PyObject* PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
|
||||||
|
|
||||||
|
|
|
@ -1093,9 +1093,6 @@ PyImport_ImportModuleLevelObject:PyObject*:locals:0:???
|
||||||
PyImport_ImportModuleLevelObject:PyObject*:fromlist:0:???
|
PyImport_ImportModuleLevelObject:PyObject*:fromlist:0:???
|
||||||
PyImport_ImportModuleLevelObject:int:level::
|
PyImport_ImportModuleLevelObject:int:level::
|
||||||
|
|
||||||
PyImport_ImportModuleNoBlock:PyObject*::+1:
|
|
||||||
PyImport_ImportModuleNoBlock:const char*:name::
|
|
||||||
|
|
||||||
PyImport_ReloadModule:PyObject*::+1:
|
PyImport_ReloadModule:PyObject*::+1:
|
||||||
PyImport_ReloadModule:PyObject*:m:0:
|
PyImport_ReloadModule:PyObject*:m:0:
|
||||||
|
|
||||||
|
|
1
Doc/data/stable_abi.dat
generated
1
Doc/data/stable_abi.dat
generated
|
@ -323,7 +323,6 @@ func,PyImport_ImportFrozenModuleObject,3.7,,
|
||||||
func,PyImport_ImportModule,3.2,,
|
func,PyImport_ImportModule,3.2,,
|
||||||
func,PyImport_ImportModuleLevel,3.2,,
|
func,PyImport_ImportModuleLevel,3.2,,
|
||||||
func,PyImport_ImportModuleLevelObject,3.7,,
|
func,PyImport_ImportModuleLevelObject,3.7,,
|
||||||
func,PyImport_ImportModuleNoBlock,3.2,,
|
|
||||||
func,PyImport_ReloadModule,3.2,,
|
func,PyImport_ReloadModule,3.2,,
|
||||||
func,PyIndex_Check,3.8,,
|
func,PyIndex_Check,3.8,,
|
||||||
type,PyInterpreterState,3.2,,opaque
|
type,PyInterpreterState,3.2,,opaque
|
||||||
|
|
|
@ -2,7 +2,7 @@ Pending removal in Python 3.15
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
* The bundled copy of ``libmpdecimal``.
|
* The bundled copy of ``libmpdecimal``.
|
||||||
* The :c:func:`PyImport_ImportModuleNoBlock`:
|
* The :c:func:`!PyImport_ImportModuleNoBlock`:
|
||||||
Use :c:func:`PyImport_ImportModule` instead.
|
Use :c:func:`PyImport_ImportModule` instead.
|
||||||
* :c:func:`PyWeakref_GetObject` and :c:func:`PyWeakref_GET_OBJECT`:
|
* :c:func:`PyWeakref_GetObject` and :c:func:`PyWeakref_GET_OBJECT`:
|
||||||
Use :c:func:`PyWeakref_GetRef` instead. The `pythoncapi-compat project
|
Use :c:func:`PyWeakref_GetRef` instead. The `pythoncapi-compat project
|
||||||
|
|
|
@ -3043,7 +3043,7 @@ Changes to Python's build process and to the C API include:
|
||||||
|
|
||||||
* Importing modules simultaneously in two different threads no longer
|
* Importing modules simultaneously in two different threads no longer
|
||||||
deadlocks; it will now raise an :exc:`ImportError`. A new API
|
deadlocks; it will now raise an :exc:`ImportError`. A new API
|
||||||
function, :c:func:`PyImport_ImportModuleNoBlock`, will look for a
|
function, :c:func:`!PyImport_ImportModuleNoBlock`, will look for a
|
||||||
module in ``sys.modules`` first, then try to import it after
|
module in ``sys.modules`` first, then try to import it after
|
||||||
acquiring an import lock. If the import lock is held by another
|
acquiring an import lock. If the import lock is held by another
|
||||||
thread, an :exc:`ImportError` is raised.
|
thread, an :exc:`ImportError` is raised.
|
||||||
|
|
|
@ -870,7 +870,7 @@ to the C API.
|
||||||
* :c:func:`!PyNumber_Coerce`, :c:func:`!PyNumber_CoerceEx`,
|
* :c:func:`!PyNumber_Coerce`, :c:func:`!PyNumber_CoerceEx`,
|
||||||
:c:func:`!PyMember_Get`, and :c:func:`!PyMember_Set` C APIs are removed.
|
:c:func:`!PyMember_Get`, and :c:func:`!PyMember_Set` C APIs are removed.
|
||||||
|
|
||||||
* New C API :c:func:`PyImport_ImportModuleNoBlock`, works like
|
* New C API :c:func:`!PyImport_ImportModuleNoBlock`, works like
|
||||||
:c:func:`PyImport_ImportModule` but won't block on the import lock
|
:c:func:`PyImport_ImportModule` but won't block on the import lock
|
||||||
(returning an error instead).
|
(returning an error instead).
|
||||||
|
|
||||||
|
|
|
@ -2499,7 +2499,7 @@ Deprecated C APIs
|
||||||
which return a :term:`borrowed reference`.
|
which return a :term:`borrowed reference`.
|
||||||
(Soft deprecated as part of :pep:`667`.)
|
(Soft deprecated as part of :pep:`667`.)
|
||||||
|
|
||||||
* Deprecate the :c:func:`PyImport_ImportModuleNoBlock` function,
|
* Deprecate the :c:func:`!PyImport_ImportModuleNoBlock` function,
|
||||||
which is just an alias to :c:func:`PyImport_ImportModule` since Python 3.3.
|
which is just an alias to :c:func:`PyImport_ImportModule` since Python 3.3.
|
||||||
(Contributed by Victor Stinner in :gh:`105396`.)
|
(Contributed by Victor Stinner in :gh:`105396`.)
|
||||||
|
|
||||||
|
|
|
@ -164,3 +164,5 @@ Deprecated C APIs
|
||||||
Removed C APIs
|
Removed C APIs
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
* :c:func:`!PyImport_ImportModuleNoBlock`: deprecated alias
|
||||||
|
of :c:func:`PyImport_ImportModule`.
|
||||||
|
|
|
@ -829,7 +829,7 @@ Previous versions of CPython have always relied on a global import lock.
|
||||||
This led to unexpected annoyances, such as deadlocks when importing a module
|
This led to unexpected annoyances, such as deadlocks when importing a module
|
||||||
would trigger code execution in a different thread as a side-effect.
|
would trigger code execution in a different thread as a side-effect.
|
||||||
Clumsy workarounds were sometimes employed, such as the
|
Clumsy workarounds were sometimes employed, such as the
|
||||||
:c:func:`PyImport_ImportModuleNoBlock` C API function.
|
:c:func:`!PyImport_ImportModuleNoBlock` C API function.
|
||||||
|
|
||||||
In Python 3.3, importing a module takes a per-module lock. This correctly
|
In Python 3.3, importing a module takes a per-module lock. This correctly
|
||||||
serializes importation of a given module from multiple threads (preventing
|
serializes importation of a given module from multiple threads (preventing
|
||||||
|
|
|
@ -51,9 +51,6 @@ PyAPI_FUNC(PyObject *) PyImport_AddModuleRef(
|
||||||
PyAPI_FUNC(PyObject *) PyImport_ImportModule(
|
PyAPI_FUNC(PyObject *) PyImport_ImportModule(
|
||||||
const char *name /* UTF-8 encoded string */
|
const char *name /* UTF-8 encoded string */
|
||||||
);
|
);
|
||||||
Py_DEPRECATED(3.13) PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock(
|
|
||||||
const char *name /* UTF-8 encoded string */
|
|
||||||
);
|
|
||||||
PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel(
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel(
|
||||||
const char *name, /* UTF-8 encoded string */
|
const char *name, /* UTF-8 encoded string */
|
||||||
PyObject *globals,
|
PyObject *globals,
|
||||||
|
|
|
@ -134,7 +134,7 @@ class ImportTests(unittest.TestCase):
|
||||||
# CRASHES importmodule(NULL)
|
# CRASHES importmodule(NULL)
|
||||||
|
|
||||||
def test_importmodulenoblock(self):
|
def test_importmodulenoblock(self):
|
||||||
# Test deprecated PyImport_ImportModuleNoBlock()
|
# Test deprecated (stable ABI only) PyImport_ImportModuleNoBlock()
|
||||||
importmodulenoblock = _testlimitedcapi.PyImport_ImportModuleNoBlock
|
importmodulenoblock = _testlimitedcapi.PyImport_ImportModuleNoBlock
|
||||||
with check_warnings(('', DeprecationWarning)):
|
with check_warnings(('', DeprecationWarning)):
|
||||||
self.check_import_func(importmodulenoblock)
|
self.check_import_func(importmodulenoblock)
|
||||||
|
|
|
@ -1161,7 +1161,7 @@ no-op now.
|
||||||
.. nonce: Lq2_gR
|
.. nonce: Lq2_gR
|
||||||
.. section: C API
|
.. section: C API
|
||||||
|
|
||||||
Replaced deprecated usage of :c:func:`PyImport_ImportModuleNoBlock` with
|
Replaced deprecated usage of :c:func:`!PyImport_ImportModuleNoBlock` with
|
||||||
:c:func:`PyImport_ImportModule` in stdlib modules. Patch by Kumar Aditya.
|
:c:func:`PyImport_ImportModule` in stdlib modules. Patch by Kumar Aditya.
|
||||||
|
|
||||||
..
|
..
|
||||||
|
|
|
@ -6538,7 +6538,7 @@ to hide implementation details. Patch by Victor Stinner.
|
||||||
.. nonce: FQJG5B
|
.. nonce: FQJG5B
|
||||||
.. section: C API
|
.. section: C API
|
||||||
|
|
||||||
Deprecate the :c:func:`PyImport_ImportModuleNoBlock` function which is just
|
Deprecate the :c:func:`!PyImport_ImportModuleNoBlock` function which is just
|
||||||
an alias to :c:func:`PyImport_ImportModule` since Python 3.3. Patch by
|
an alias to :c:func:`PyImport_ImportModule` since Python 3.3. Patch by
|
||||||
Victor Stinner.
|
Victor Stinner.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Remove deprecated alias :c:func:`!PyImport_ImportModuleNoBlock` of
|
||||||
|
:c:func:`PyImport_ImportModule`. Patch by Bénédikt Tran.
|
|
@ -888,6 +888,7 @@
|
||||||
added = '3.2'
|
added = '3.2'
|
||||||
[function.PyImport_ImportModuleNoBlock]
|
[function.PyImport_ImportModuleNoBlock]
|
||||||
added = '3.2'
|
added = '3.2'
|
||||||
|
abi_only = true
|
||||||
[function.PyImport_ReloadModule]
|
[function.PyImport_ReloadModule]
|
||||||
added = '3.2'
|
added = '3.2'
|
||||||
[function.PyInterpreterState_Clear]
|
[function.PyInterpreterState_Clear]
|
||||||
|
|
|
@ -108,20 +108,19 @@ pyimport_importmodule(PyObject *Py_UNUSED(module), PyObject *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Test PyImport_ImportModuleNoBlock() */
|
/* Test PyImport_ImportModuleNoBlock() (removed in 3.15) */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
pyimport_importmodulenoblock(PyObject *Py_UNUSED(module), PyObject *args)
|
pyimport_importmodulenoblock(PyObject *Py_UNUSED(module), PyObject *args)
|
||||||
{
|
{
|
||||||
|
// Get the function from the stable ABI.
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock(const char *name);
|
||||||
|
|
||||||
const char *name;
|
const char *name;
|
||||||
Py_ssize_t size;
|
Py_ssize_t size;
|
||||||
if (!PyArg_ParseTuple(args, "z#", &name, &size)) {
|
if (!PyArg_ParseTuple(args, "z#", &name, &size)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
_Py_COMP_DIAG_PUSH
|
|
||||||
_Py_COMP_DIAG_IGNORE_DEPR_DECLS
|
|
||||||
return PyImport_ImportModuleNoBlock(name);
|
return PyImport_ImportModuleNoBlock(name);
|
||||||
_Py_COMP_DIAG_POP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3434,8 +3434,10 @@ PyImport_ImportModule(const char *name)
|
||||||
* ImportError instead of blocking.
|
* ImportError instead of blocking.
|
||||||
*
|
*
|
||||||
* Returns the module object with incremented ref count.
|
* Returns the module object with incremented ref count.
|
||||||
|
*
|
||||||
|
* Removed in 3.15, but kept for stable ABI compatibility.
|
||||||
*/
|
*/
|
||||||
PyObject *
|
PyAPI_FUNC(PyObject *)
|
||||||
PyImport_ImportModuleNoBlock(const char *name)
|
PyImport_ImportModuleNoBlock(const char *name)
|
||||||
{
|
{
|
||||||
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue