From f9e96c54cd2bad250179b2992870f8c27ae7e65d Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Thu, 6 Oct 2005 04:43:52 +0000 Subject: * actualy add the introspection parser to CVS :-) --- python/introspect_parser.py | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 python/introspect_parser.py diff --git a/python/introspect_parser.py b/python/introspect_parser.py new file mode 100644 index 00000000..6e94cccf --- /dev/null +++ b/python/introspect_parser.py @@ -0,0 +1,50 @@ +import libxml2 +import cStringIO +import exceptions + +def process_introspection_data(data): + method_map = {} + + XMLREADER_START_ELEMENT_NODE_TYPE = 1 + XMLREADER_END_ELEMENT_NODE_TYPE = 15 + + stream = cStringIO.StringIO(data) + input_source = libxml2.inputBuffer(stream) + reader = input_source.newTextReader("urn:introspect") + + ret = reader.Read() + current_iface='' + current_method='' + current_sigstr = '' + + while ret == 1: + name = reader.LocalName() + if reader.NodeType() == XMLREADER_START_ELEMENT_NODE_TYPE: + if name == 'interface': + current_iface = reader.GetAttribute('name') + elif name == 'method': + current_method = reader.GetAttribute('name') + if reader.IsEmptyElement(): + method_map[current_iface + '.' + current_method] = '' + current_method = '' + current_sigstr = '' + + elif name == 'arg': + direction = reader.GetAttribute('direction') + + if not direction or direction == 'in': + current_sigstr = current_sigstr + reader.GetAttribute('type') + + elif reader.NodeType() == XMLREADER_END_ELEMENT_NODE_TYPE: + if name == 'method': + method_map[current_iface + '.' + current_method] = current_sigstr + current_method = '' + current_sigstr = '' + + + ret = reader.Read() + + if ret != 0: + raise exceptions.IntrospectionParserException(data) + + return method_map -- cgit