From: Olivier Aubert Date: Thu, 3 Sep 2009 15:22:22 +0000 (+0200) Subject: python-ctypes: fix Logger bindings. X-Git-Tag: 1.1.0-ff~3561 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=d3b60bf02d38db7098205ad495c4c74cbce713fd;p=vlc python-ctypes: fix Logger bindings. --- diff --git a/bindings/python-ctypes/generate.py b/bindings/python-ctypes/generate.py index a1870e0439..05f39a7f2a 100755 --- a/bindings/python-ctypes/generate.py +++ b/bindings/python-ctypes/generate.py @@ -329,7 +329,7 @@ class PythonGenerator(object): 'libvlc_media_t*': 'Media', 'libvlc_log_t*': 'Log', 'libvlc_log_iterator_t*': 'LogIterator', - 'libvlc_log_message_t*': 'LogMessage', + 'libvlc_log_message_t*': 'ctypes.POINTER(LogMessage)', 'libvlc_event_type_t': 'ctypes.c_uint', 'libvlc_event_manager_t*': 'EventManager', 'libvlc_media_discoverer_t*': 'MediaDiscoverer', @@ -658,9 +658,15 @@ class PythonGenerator(object): # Check for standard methods if name == 'count': # There is a count method. Generate a __len__ one. - self.output(""" def __len__(self): + if params and params[-1][0] == 'libvlc_exception_t*': + self.output(""" def __len__(self): e=VLCException() return %s(self, e) +""" % method) + else: + # No exception + self.output(""" def __len__(self): + return %s(self) """ % method) elif name.endswith('item_at_index'): # Indexable (and thus iterable)" diff --git a/bindings/python-ctypes/header.py b/bindings/python-ctypes/header.py index d567b9bbdc..fcaaaae74d 100755 --- a/bindings/python-ctypes/header.py +++ b/bindings/python-ctypes/header.py @@ -149,6 +149,9 @@ class LogMessage(ctypes.Structure): ('message', ctypes.c_char_p), ] + def __init__(self): + self.size=ctypes.sizeof(self) + def __str__(self): return "vlc.LogMessage(%d:%s): %s" % (self.severity, self.type, self.message) diff --git a/bindings/python-ctypes/override.py b/bindings/python-ctypes/override.py index 0888ae9c19..61ddd1ef5f 100644 --- a/bindings/python-ctypes/override.py +++ b/bindings/python-ctypes/override.py @@ -210,11 +210,14 @@ class LogIterator: def next(self): if not self.has_next(): raise StopIteration - buffer=LogMessage() + buf=LogMessage() e=VLCException() - ret=libvlc_log_iterator_next(self, buffer, e) - return ret + ret=libvlc_log_iterator_next(self, buf, e) + return ret.contents class Log: def __iter__(self): return self.get_iterator() + + def dump(self): + return [ str(m) for m in self ] diff --git a/bindings/python-ctypes/test.py b/bindings/python-ctypes/test.py index 97899fad5f..02622f32f4 100755 --- a/bindings/python-ctypes/test.py +++ b/bindings/python-ctypes/test.py @@ -107,5 +107,31 @@ class TestVLCAPI(unittest.TestCase): p=i.media_player_new(mrl) self.assertEqual(p.get_state(), vlc.State.Ended) + def test_libvlc_logger(self): + i=vlc.Instance() + l=i.log_open() + l.clear() + self.assertEqual(l.count(), 0) + l.close() + + def test_libvlc_logger_clear(self): + i=vlc.Instance() + l=i.log_open() + l.clear() + self.assertEqual(l.count(), 0) + l.close() + + def test_libvlc_logger(self): + i=vlc.Instance() + i.set_log_verbosity(3) + l=i.log_open() + # This should generate a log message + i.add_intf('dummy') + self.assertNotEqual(l.count(), 0) + for m in l: + # Ensure that messages can be read. + self.assertNotEqual(len(m.message), 0) + l.close() + if __name__ == '__main__': unittest.main()