mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +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 | ||||
|    :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) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1093,9 +1093,6 @@ PyImport_ImportModuleLevelObject:PyObject*:locals:0:??? | |||
| PyImport_ImportModuleLevelObject:PyObject*:fromlist:0:??? | ||||
| PyImport_ImportModuleLevelObject:int:level:: | ||||
| 
 | ||||
| PyImport_ImportModuleNoBlock:PyObject*::+1: | ||||
| PyImport_ImportModuleNoBlock:const char*:name:: | ||||
| 
 | ||||
| PyImport_ReloadModule:PyObject*::+1: | ||||
| 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_ImportModuleLevel,3.2,, | ||||
| func,PyImport_ImportModuleLevelObject,3.7,, | ||||
| func,PyImport_ImportModuleNoBlock,3.2,, | ||||
| func,PyImport_ReloadModule,3.2,, | ||||
| func,PyIndex_Check,3.8,, | ||||
| type,PyInterpreterState,3.2,,opaque | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ Pending removal in Python 3.15 | |||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| * The bundled copy of ``libmpdecimal``. | ||||
| * The :c:func:`PyImport_ImportModuleNoBlock`: | ||||
| * The :c:func:`!PyImport_ImportModuleNoBlock`: | ||||
|   Use :c:func:`PyImport_ImportModule` instead. | ||||
| * :c:func:`PyWeakref_GetObject` and :c:func:`PyWeakref_GET_OBJECT`: | ||||
|   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 | ||||
|   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 | ||||
|   acquiring an import lock.  If the import lock is held by another | ||||
|   thread, an :exc:`ImportError` is raised. | ||||
|  |  | |||
|  | @ -870,7 +870,7 @@ to the C API. | |||
| * :c:func:`!PyNumber_Coerce`, :c:func:`!PyNumber_CoerceEx`, | ||||
|   :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 | ||||
|   (returning an error instead). | ||||
| 
 | ||||
|  |  | |||
|  | @ -2499,7 +2499,7 @@ Deprecated C APIs | |||
|   which return a :term:`borrowed reference`. | ||||
|   (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. | ||||
|   (Contributed by Victor Stinner in :gh:`105396`.) | ||||
| 
 | ||||
|  |  | |||
|  | @ -164,3 +164,5 @@ Deprecated 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 | ||||
| would trigger code execution in a different thread as a side-effect. | ||||
| 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 | ||||
| serializes importation of a given module from multiple threads (preventing | ||||
|  |  | |||
|  | @ -51,9 +51,6 @@ PyAPI_FUNC(PyObject *) PyImport_AddModuleRef( | |||
| PyAPI_FUNC(PyObject *) PyImport_ImportModule( | ||||
|     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( | ||||
|     const char *name,           /* UTF-8 encoded string */ | ||||
|     PyObject *globals, | ||||
|  |  | |||
|  | @ -134,7 +134,7 @@ def test_importmodule(self): | |||
|         # CRASHES importmodule(NULL) | ||||
| 
 | ||||
|     def test_importmodulenoblock(self): | ||||
|         # Test deprecated PyImport_ImportModuleNoBlock() | ||||
|         # Test deprecated (stable ABI only) PyImport_ImportModuleNoBlock() | ||||
|         importmodulenoblock = _testlimitedcapi.PyImport_ImportModuleNoBlock | ||||
|         with check_warnings(('', DeprecationWarning)): | ||||
|             self.check_import_func(importmodulenoblock) | ||||
|  |  | |||
|  | @ -1161,7 +1161,7 @@ no-op now. | |||
| .. nonce: Lq2_gR | ||||
| .. 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. | ||||
| 
 | ||||
| .. | ||||
|  |  | |||
|  | @ -6538,7 +6538,7 @@ to hide implementation details. Patch by Victor Stinner. | |||
| .. nonce: FQJG5B | ||||
| .. 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 | ||||
| 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' | ||||
| [function.PyImport_ImportModuleNoBlock] | ||||
|     added = '3.2' | ||||
|     abi_only = true | ||||
| [function.PyImport_ReloadModule] | ||||
|     added = '3.2' | ||||
| [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 * | ||||
| 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; | ||||
|     Py_ssize_t size; | ||||
|     if (!PyArg_ParseTuple(args, "z#", &name, &size)) { | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     _Py_COMP_DIAG_PUSH | ||||
|     _Py_COMP_DIAG_IGNORE_DEPR_DECLS | ||||
|     return PyImport_ImportModuleNoBlock(name); | ||||
|     _Py_COMP_DIAG_POP | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -3434,8 +3434,10 @@ PyImport_ImportModule(const char *name) | |||
|  * ImportError instead of blocking. | ||||
|  * | ||||
|  * 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) | ||||
| { | ||||
|     if (PyErr_WarnEx(PyExc_DeprecationWarning, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Bénédikt Tran
						Bénédikt Tran