python: override Gst.ValueArray.append_value()

This ensures that self.array is kept up to date.

Add append() method that is more natural than the static method.

Allow creating empty ValueArray by omitting the constructor parameter.

Fixes: #3114
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8952>
This commit is contained in:
Xavier Claessens 2025-05-08 13:19:06 -04:00 committed by GStreamer Marge Bot
parent 20904a1b92
commit c2a4c3a53a
2 changed files with 64 additions and 4 deletions

View File

@ -583,9 +583,23 @@ __all__.append('FractionRange')
class ValueArray(Gst.ValueArray):
def __init__(self, array):
def __init__(self, array=[]):
self.array = list(array)
def append(self, item):
self.array.append(item)
def prepend(self, item):
self.array = [item] + self.array
@staticmethod
def append_value(this, item):
this.append(item)
@staticmethod
def prepend_value(this, item):
this.prepend(item)
def __getitem__(self, index):
return self.array[index]
@ -607,9 +621,23 @@ __all__.append('ValueArray')
class ValueList(Gst.ValueList):
def __init__(self, array):
def __init__(self, array=[]):
self.array = list(array)
def append(self, item):
self.array.append(item)
def prepend(self, item):
self.array = [item] + self.array
@staticmethod
def append_value(this, item):
this.append(item)
@staticmethod
def prepend_value(this, item):
this.prepend(item)
def __getitem__(self, index):
return self.array[index]

View File

@ -262,7 +262,6 @@ class TestValueArray(TestCase):
self.assertEqual(a.array, [1, 2, 3])
self.assertRaises(TypeError, Gst.ValueArray, 1)
self.assertRaises(TypeError, Gst.ValueArray)
def testRepr(self):
Gst.init(None)
@ -319,6 +318,23 @@ class TestValueArray(TestCase):
self.assertEqual(value[1][0], -1)
self.assertEqual(value[1][1], 0)
def testAppendPrepend(self):
array = Gst.ValueArray()
Gst.ValueArray.append_value(array, 2)
Gst.ValueArray.prepend_value(array, 1)
array.append(3)
array.prepend(0)
self.assertEqual(len(array), 4)
self.assertEqual(array[0], 0)
self.assertEqual(array[1], 1)
self.assertEqual(array[2], 2)
self.assertEqual(array[3], 3)
self.assertEqual(Gst.ValueArray.get_size(array), 4)
self.assertEqual(Gst.ValueArray.get_value(array, 0), 0)
self.assertEqual(Gst.ValueArray.get_value(array, 1), 1)
self.assertEqual(Gst.ValueArray.get_value(array, 2), 2)
self.assertEqual(Gst.ValueArray.get_value(array, 3), 3)
class TestValueList(TestCase):
def testConstructor(self):
@ -328,7 +344,6 @@ class TestValueList(TestCase):
self.assertEqual(a.array, [1, 2, 3])
self.assertRaises(TypeError, Gst.ValueList, 1)
self.assertRaises(TypeError, Gst.ValueList)
def testRepr(self):
Gst.init(None)
@ -353,6 +368,23 @@ class TestValueList(TestCase):
self.assertEqual(value[1][0], -1)
self.assertEqual(value[1][1], 0)
def testAppendPrepend(self):
array = Gst.ValueList()
Gst.ValueList.append_value(array, 2)
Gst.ValueList.prepend_value(array, 1)
array.append(3)
array.prepend(0)
self.assertEqual(len(array), 4)
self.assertEqual(array[0], 0)
self.assertEqual(array[1], 1)
self.assertEqual(array[2], 2)
self.assertEqual(array[3], 3)
self.assertEqual(Gst.ValueList.get_size(array), 4)
self.assertEqual(Gst.ValueList.get_value(array, 0), 0)
self.assertEqual(Gst.ValueList.get_value(array, 1), 1)
self.assertEqual(Gst.ValueList.get_value(array, 2), 2)
self.assertEqual(Gst.ValueList.get_value(array, 3), 3)
class TestIntRange(TestCase):
@unittest.skipUnless(sys.version_info >= (3, 0), "requires Python 3")