[3.13] gh-105733: Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it. (GH-122281) (GH-122440)

gh-105733: Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it. (GH-122281)

Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it.

Partially reverts 2211454fe2
(cherry picked from commit 3833d27f98)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
This commit is contained in:
Miss Islington (bot) 2024-07-30 10:05:09 +02:00 committed by GitHub
parent a2c36ddd16
commit a4c7eb54bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 14 additions and 17 deletions

View File

@ -2621,6 +2621,15 @@ Arrays and pointers
Array subclass constructors accept positional arguments, used to Array subclass constructors accept positional arguments, used to
initialize the elements in order. initialize the elements in order.
.. function:: ARRAY(type, length)
Create an array.
Equivalent to ``type * length``, where *type* is a
:mod:`ctypes` data type and *length* an integer.
This function is :term:`soft deprecated` in favor of multiplication.
There are no plans to remove it.
.. class:: _Pointer .. class:: _Pointer

View File

@ -1482,8 +1482,8 @@ New Deprecations
(Contributed by Hugo van Kemenade in :gh:`80480`.) (Contributed by Hugo van Kemenade in :gh:`80480`.)
* :mod:`ctypes`: Deprecate undocumented :func:`!ctypes.SetPointerType` * :mod:`ctypes`: Deprecate undocumented :func:`!ctypes.SetPointerType`
and :func:`!ctypes.ARRAY` functions. function. :term:`Soft-deprecate <soft deprecated>` the :func:`ctypes.ARRAY`
Replace ``ctypes.ARRAY(item_type, size)`` with ``item_type * size``. function in favor of multiplication.
(Contributed by Victor Stinner in :gh:`105733`.) (Contributed by Victor Stinner in :gh:`105733`.)
* :mod:`decimal`: Deprecate non-standard format specifier "N" for * :mod:`decimal`: Deprecate non-standard format specifier "N" for

View File

@ -314,8 +314,6 @@ def SetPointerType(pointer, cls):
del _pointer_type_cache[id(pointer)] del _pointer_type_cache[id(pointer)]
def ARRAY(typ, len): def ARRAY(typ, len):
import warnings
warnings._deprecated("ctypes.ARRAY", remove=(3, 15))
return typ * len return typ * len
################################################################ ################################################################

View File

@ -1,8 +1,7 @@
import ctypes import ctypes
import sys import sys
import unittest import unittest
import warnings from ctypes import (Structure, Array, ARRAY, sizeof, addressof,
from ctypes import (Structure, Array, sizeof, addressof,
create_string_buffer, create_unicode_buffer, create_string_buffer, create_unicode_buffer,
c_char, c_wchar, c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint, c_char, c_wchar, c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint,
c_long, c_ulonglong, c_float, c_double, c_longdouble) c_long, c_ulonglong, c_float, c_double, c_longdouble)
@ -17,13 +16,6 @@ formats = c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint, \
c_long, c_ulonglong, c_float, c_double, c_longdouble c_long, c_ulonglong, c_float, c_double, c_longdouble
def ARRAY(*args):
# ignore DeprecationWarning in tests
with warnings.catch_warnings():
warnings.simplefilter('ignore', DeprecationWarning)
return ctypes.ARRAY(*args)
class ArrayTestCase(unittest.TestCase): class ArrayTestCase(unittest.TestCase):
def test_inheritance_hierarchy(self): def test_inheritance_hierarchy(self):
self.assertEqual(Array.mro(), [Array, _CData, object]) self.assertEqual(Array.mro(), [Array, _CData, object])
@ -275,10 +267,6 @@ class ArrayTestCase(unittest.TestCase):
def test_large_array(self, size): def test_large_array(self, size):
c_char * size c_char * size
def test_deprecation(self):
with self.assertWarns(DeprecationWarning):
CharArray = ctypes.ARRAY(c_char, 3)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -0,0 +1,2 @@
:func:`ctypes.ARRAY` is now :term:`soft deprecated`: it no longer emits deprecation
warnings and is not scheduled for removal.