From: thierry Date: Wed, 18 Jul 2007 07:00:36 +0000 (+0000) Subject: quick and dirty parsing utilities for listing slice attributes from slices.xml X-Git-Tag: foo~440 X-Git-Url: http://git.onelab.eu/?p=infrastructure.git;a=commitdiff_plain;h=e172bc4c6130b8ad64835466a7d17c991ffbef26 quick and dirty parsing utilities for listing slice attributes from slices.xml --- diff --git a/slice-attributes/SlicesLoad.py b/slice-attributes/SlicesLoad.py new file mode 100755 index 0000000..0c811af --- /dev/null +++ b/slice-attributes/SlicesLoad.py @@ -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 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