quick and dirty parsing utilities for listing slice attributes from slices.xml
authorthierry <thierry@41d37cc5-eb28-0410-a9bf-d37491348ade>
Wed, 18 Jul 2007 07:00:36 +0000 (07:00 +0000)
committerthierry <thierry@41d37cc5-eb28-0410-a9bf-d37491348ade>
Wed, 18 Jul 2007 07:00:36 +0000 (07:00 +0000)
slice-attributes/SlicesLoad.py [new file with mode: 0755]
slice-attributes/SlicesParse.py [new file with mode: 0755]

diff --git a/slice-attributes/SlicesLoad.py b/slice-attributes/SlicesLoad.py
new file mode 100755 (executable)
index 0000000..0c811af
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+import sys
+import pickle
+
+class SlicesLoad:
+
+    def __init__ (self, filename):
+        self.filename=filename+".bin"
+        self.load()
+
+    def load (self):
+        
+        file = open(self.filename,'rb')
+        self.slices = pickle.load(file)
+        file.close()
+
+    def print_rspecs (self):
+        
+        for slice in self.slices:
+            print 'slice',slice,'->',self.slices[slice]
+
+if __name__ == '__main__':
+
+    for filename in sys.argv[1:]:
+
+        sl_import = SlicesLoad(filename)
+        sl_import.print_rspecs()
diff --git a/slice-attributes/SlicesParse.py b/slice-attributes/SlicesParse.py
new file mode 100755 (executable)
index 0000000..4b90409
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+import xml.dom.minidom
+import time
+import sys
+
+def dom_debug (node,level):
+    print level,'<<< dom_debug 1>>>',node.nodeType
+#    print level,'<<< dom_debug 2>>>',dir(node)
+#    print level,'<<< dom_debug 4>>>',node.nodeValue
+    for child in node.childNodes:
+        dom_debug (child,level+1)
+    print level,'<<end>>',len(node.childNodes)
+
+# returns node's value - tries to be flexible
+def dom_get_text (node):
+#    dom_debug(node,0)
+    if node.nodeType == node.TEXT_NODE:
+        return node.data
+    elif node.nodeType == node.ELEMENT_NODE and len(node.childNodes) == 1:
+        return dom_get_text(node.childNodes[0])
+    elif node.nodeType == node.ELEMENT_NODE:
+        return 'dom_get_text: element does not have 1 child'
+    return ""
+
+class SlicesParse:
+
+    def __init__ (self, filename):
+        self.filename=filename
+
+        impl = xml.dom.minidom.getDOMImplementation()
+        self.dom = impl.createDocument (None, 'slices', None)
+
+    
+    def load (self):
+        
+        self.doc = xml.dom.minidom.parse(self.filename)
+
+    def scan_rspecs (self):
+        
+        slices = {}
+        for slice in self.doc.getElementsByTagName('slice'):
+            rspecs = []
+            resources = slice.getElementsByTagName('rspec')[0]
+            for resource in resources.getElementsByTagName('resource'):
+                value=resource.getElementsByTagName('value')[0]
+                rspecs.append({ 'name': value.getAttribute('name'),
+                                'type':value.getAttribute('type'),
+                                'value':dom_get_text(value) } )
+            if rspecs:
+                slices [slice.getAttribute('name')] = rspecs
+
+        return slices
+
+if __name__ == '__main__':
+
+    for filename in sys.argv[1:]:
+        export = SlicesParse(filename)
+
+        start = time.time()
+        export.load()
+        now = time.time()
+        print 'parsing : %d seconds'%(now-start)
+        start=now
+        
+        slices=export.scan_rspecs()
+        now = time.time()
+        print 'scanning : %d seconds'%(now-start)
+        start=now
+
+        storage=open(filename+".bin","wb")
+        import pickle
+        pickle.dump(slices,storage)
+        storage.close()
+        print 'storage : %d seconds'%(now-start)
+        start=now