From c2a4c3a53a5d249b90528faeb2541846eb7075eb Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Thu, 8 May 2025 13:19:06 -0400 Subject: [PATCH] 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: --- subprojects/gst-python/gi/overrides/Gst.py | 32 +++++++++++++++-- .../gst-python/testsuite/test_types.py | 36 +++++++++++++++++-- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/subprojects/gst-python/gi/overrides/Gst.py b/subprojects/gst-python/gi/overrides/Gst.py index 04499bc03b..6e2b39f69d 100644 --- a/subprojects/gst-python/gi/overrides/Gst.py +++ b/subprojects/gst-python/gi/overrides/Gst.py @@ -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] diff --git a/subprojects/gst-python/testsuite/test_types.py b/subprojects/gst-python/testsuite/test_types.py index f33772b112..a5be3ec004 100644 --- a/subprojects/gst-python/testsuite/test_types.py +++ b/subprojects/gst-python/testsuite/test_types.py @@ -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")