X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=slice-attributes%2FSlicesParse.py;fp=slice-attributes%2FSlicesParse.py;h=4b904097cd65b2e134ea1d19f9a0bb7b725ba097;hb=e172bc4c6130b8ad64835466a7d17c991ffbef26;hp=0000000000000000000000000000000000000000;hpb=6e264f05dfe5d29966a0f0d3dbd195ffcbe7ba0d;p=infrastructure.git diff --git a/slice-attributes/SlicesParse.py b/slice-attributes/SlicesParse.py new file mode 100755 index 0000000..4b90409 --- /dev/null +++ b/slice-attributes/SlicesParse.py @@ -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,'<>',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