summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <thibault.saunier@osg.samsung.com>2017-07-24 12:13:13 -0400
committerThibault Saunier <thibault.saunier@osg.samsung.com>2017-07-26 15:27:19 -0400
commit02ddaf29f92036c80b2c660aa007266707f69970 (patch)
treeeda7fbacc673c44851d66a8b2b0984833151ebd8
parent24156b0b0dd29940b891bcc441cdc7fffad45142 (diff)
structures: Override __new__ to make it more pythonic
-rw-r--r--gi/overrides/Gst.py21
-rw-r--r--testsuite/test_gst.py10
2 files changed, 31 insertions, 0 deletions
diff --git a/gi/overrides/Gst.py b/gi/overrides/Gst.py
index 8704709..b440f0b 100644
--- a/gi/overrides/Gst.py
+++ b/gi/overrides/Gst.py
@@ -224,6 +224,27 @@ Pipeline = override(Pipeline)
__all__.append('Pipeline')
class Structure(Gst.Structure):
+ def __new__(cls, *args, **kwargs):
+ if not args:
+ if kwargs:
+ raise TypeError("wrong arguments when creating GstStructure, first argument"
+ " must be the structure name.")
+ return Structure.new_empty()
+ elif len(args) > 1:
+ raise TypeError("wrong arguments when creating GstStructure object")
+ elif isinstance(args[0], str):
+ if not kwargs:
+ return Structure.from_string(args[0])[0]
+ struct = Structure.new_empty(args[0])
+ for k, v in kwargs.items():
+ struct[k] = v
+
+ return struct
+ elif isinstance(args[0], Structure):
+ return args[0].copy()
+
+ raise TypeError("wrong arguments when creating GstStructure object")
+
def __getitem__(self, key):
return self.get_value(key)
diff --git a/testsuite/test_gst.py b/testsuite/test_gst.py
index e04b38f..7ca8f7a 100644
--- a/testsuite/test_gst.py
+++ b/testsuite/test_gst.py
@@ -76,5 +76,15 @@ class TestNotInitialized(TestCase):
Gst.ElementFactory.make("identity", None)
+class TestStructure(TestCase):
+
+ def test_new(self):
+ Gst.init(None)
+ test = Gst.Structure('test', test=1)
+ self.assertEqual(test['test'], 1)
+
+ test = Gst.Structure('test,test=1')
+ self.assertEqual(test['test'], 1)
+
if __name__ == "__main__":
unittest.main()