* actualy add the introspection parser to CVS :-)
authorJohn (J5) Palmieri <johnp@redhat.com>
Thu, 6 Oct 2005 04:43:52 +0000 (04:43 +0000)
committerJohn (J5) Palmieri <johnp@redhat.com>
Thu, 6 Oct 2005 04:43:52 +0000 (04:43 +0000)
python/introspect_parser.py [new file with mode: 0644]

diff --git a/python/introspect_parser.py b/python/introspect_parser.py
new file mode 100644 (file)
index 0000000..6e94ccc
--- /dev/null
@@ -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