diff options
author | Thibault Saunier <thibault.saunier@osg.samsung.com> | 2017-07-24 12:13:13 -0400 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@osg.samsung.com> | 2017-07-26 15:27:19 -0400 |
commit | 02ddaf29f92036c80b2c660aa007266707f69970 (patch) | |
tree | eda7fbacc673c44851d66a8b2b0984833151ebd8 | |
parent | 24156b0b0dd29940b891bcc441cdc7fffad45142 (diff) |
structures: Override __new__ to make it more pythonic
-rw-r--r-- | gi/overrides/Gst.py | 21 | ||||
-rw-r--r-- | testsuite/test_gst.py | 10 |
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() |