diff -r 7685cec9fd3c -r f2ddfa555b0f doc/api/python/helium.outputer-pysrc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/api/python/helium.outputer-pysrc.html Fri Sep 11 11:54:49 2009 +0100 @@ -0,0 +1,701 @@ + + + + + helium.outputer + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package helium :: + Module outputer + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Module helium.outputer

+
+  1  #============================================================================  
+  2  #Name        : outputer.py  
+  3  #Part of     : Helium  
+  4   
+  5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+  6  #All rights reserved. 
+  7  #This component and the accompanying materials are made available 
+  8  #under the terms of the License "Eclipse Public License v1.0" 
+  9  #which accompanies this distribution, and is available 
+ 10  #at the URL "http://www.eclipse.org/legal/epl-v10.html". 
+ 11  # 
+ 12  #Initial Contributors: 
+ 13  #Nokia Corporation - initial contribution. 
+ 14  # 
+ 15  #Contributors: 
+ 16  # 
+ 17  #Description: 
+ 18  #=============================================================================== 
+ 19   
+ 20  ## 
+ 21  # Outputer module 
+ 22  # Description : Port to python of the ISIS::Logger3::XML2HTML perl module 
+ 23  # 
+ 24  # 1.0.0 (13/12/2006) 
+ 25  #  - First version of the module. 
+ 26  ## 
+ 27  import codecs 
+ 28  import xml.dom.minidom 
+ 29  from helium.output.widgets import * 
+ 30  import urllib2 
+ 31  import amara 
+ 32  import re 
+ 33  import dataurl 
+ 34   
+
35 -class Configuration: +
36 - def __init__(self, url): +
37 f = urllib2.urlopen(url)# + 38 data = f.read() + 39 f.close() + 40 self.__xml = amara.parse(data) +
41 +
42 - def getClass(self, type, default = None): +
43 return self._getValue(type, "class", default) +
44 +
45 - def getImg(self, type, default = None): +
46 return self._getValue(type, "img", default) +
47 +
48 - def getWidth(self, type, default = None): +
49 return self._getValue(type, "width", default) +
50 +
51 - def getHeight(self, type, default = None): +
52 return self._getValue(type, "height", default) +
53 +
54 - def _getValue(self, type, attr, default = None): +
55 r = self.__xml.xml_xpath("/htmloutput/icons/icon[@type='%s']" % type) + 56 if len(r) == 0: + 57 if default == None: + 58 raise Exception("Not found") + 59 else: + 60 return default + 61 return r[0][attr] +
62 +
63 -class XML2XHTML: +
64 +
65 - def __init__(self, filename, url="http://fawww.europe.nokia.com/isis/isis_interface/configuration.xml", usedataurl=False): +
66 self.__config = Configuration(url) + 67 self.__filename = filename + 68 self.__srcdoc = xml.dom.minidom.parse(filename) + 69 self.__srcdoc.normalize() + 70 self.__usedataurl = usedataurl + 71 + 72 # xhtml output + 73 dom = xml.dom.minidom.getDOMImplementation() + 74 doctype = dom.createDocumentType("html", + 75 "-//W3C//DTD XHTML 1.0 Strict//EN", + 76 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd") + 77 self.__doc = dom.createDocument(None, "html", doctype) + 78 self.__xhtml = self.__doc.getElementsByTagName("html")[0] + 79 self.__xhtml.setAttributeNS("", "xmlns", "http://www.w3.org/1999/xhtml") + 80 self.__id = 0 + 81 self.__xhtml_summary = None + 82 self.__tags = {} + 83 self.__css = ["http://fawww.europe.nokia.com/isis/isis_interface/css/logger2.css"] + 84 self.__javascript = ["http://fawww.europe.nokia.com/isis/isis_interface/javascript/expand2.js"] + 85 self.__factory = {'__header' : XML2XHTML.forname('helium.output.widgets.Header'), + 86 '__footer' : XML2XHTML.forname('helium.output.widgets.Footer'), + 87 '__maincontent' : XML2XHTML.forname('helium.output.widgets.Box'), + 88 '__summary' : XML2XHTML.forname('helium.output.widgets.Summary'), + 89 '__print' : XML2XHTML.forname('helium.output.widgets.Text'), + 90 '__printraw' : XML2XHTML.forname('helium.output.widgets.RawText'), + 91 '__event' : XML2XHTML.forname('helium.output.widgets.Event')} +
92 +
93 - def _getId(self): +
94 self.__id += 1 + 95 return self.__id +
96 + 99 +102 +113 +124 +125 +
126 - def generate(self): +
127 root = self.__srcdoc.documentElement +128 if root.tagName != "__log": +129 raise Exception("Invalid document must be __log.") +130 +131 for c in root.getElementsByTagName("__customoutputer"): +132 self.__factory[c.attributes['type'].value] = XML2XHTML.forname(c.attributes['module'].value) +133 +134 +135 head = self.__doc.createElementNS("", "head") +136 title = self.__doc.createElementNS("", "title") +137 self.__title = self.__doc.createTextNode("") +138 title.appendChild(self.__title) +139 head.appendChild(title) +140 +141 self._generateCSSLinks(head) +142 self._generateJScriptLink(head) +143 +144 body = self.__doc.createElementNS("", "body") +145 self.__xhtml.appendChild(head) +146 self.__xhtml.appendChild(body) +147 +148 +149 for c in root.childNodes: +150 if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__header": +151 self._handleHeader(c, body) +152 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__summary": +153 self._handleSummary(c, body) +154 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__maincontent": +155 self._handleMainContent(c, body) +156 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "build": +157 self._handleBuild(c, body) +158 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'] == "maincontent": +159 self._handleMainContent(c, body) +160 +161 try: +162 footer = root.getElementsByTagName("__footer")[0] +163 f = self.__factory["__footer"](self.__doc, body) +164 if footer.attributes.has_key("title"): +165 f.setTitle(footer.attributes['title'].value) +166 if footer.attributes.has_key("subtitle"): +167 f.setSubTitle(footer.attributes['subtitle'].value) +168 except Exception: +169 pass +170 # Generate summary +171 self._createSummary() +
172 +
173 - def _handleHeader(self, node, container): +
174 h = self.__factory["__header"](self.__doc, container) +175 if node.attributes.has_key('title'): +176 self.__title.data = node.attributes['title'].value +177 h.setTitle(node.attributes['title'].value) +178 if node.attributes.has_key("subtitle"): +179 h.setSubTitle(node.attributes['subtitle'].value) +
180 +
181 - def _handleSummary(self, node, container): +
182 box = self.__factory["__summary"](self.__doc, container) +183 if node.attributes.has_key('title'): +184 box.setTitle(node.attributes["title"].value) +185 +186 for c in node.getElementsByTagName("__elmt"): +187 box.addElement(c.attributes['tag'].value, c.attributes['val'].value) +188 self.__xhtml_summary = box +
189 +
190 - def _handleBuild(self, node, container): +
191 for c in node.childNodes: +192 if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'].value == 'maincontent': +193 self._handleMainContent(c, container) +
194 +195 +
196 - def _handleMainContent(self, node, container): +
197 box = self.__factory["__maincontent"](self.__doc, container) +198 if node.attributes.has_key("title"): +199 box.setTitle(node.attributes["title"].value) +200 if node.attributes.has_key("name"): +201 box.setTitle(node.attributes["name"].value) +202 for c in node.childNodes: +203 if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__event": +204 self._handleEvent(c, box.getDOMContainer()) +205 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'].value == 'event': +206 self._handleEvent(c, box.getDOMContainer()) +207 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "message": +208 self._handleMessage(c, box.getDOMContainer()) +209 elif c.nodeType == xml.dom.Node.ELEMENT_NODE: +210 self._handlePrint(c, box.getDOMContainer()) +
211 +
212 - def _handleEvent(self, node, container): +
213 tags = self.__tags +214 self.__tags = {} +215 event = self.__factory["__event"](self.__doc, container, self._getId()) +216 if node.attributes.has_key('title'): +217 event.setTitle(node.attributes['title'].value) +218 elif node.attributes.has_key('name'): +219 event.setTitle(node.attributes['name'].value) +220 for c in node.childNodes: +221 if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__event": +222 self._handleEvent(c, event.getDOMContainer()) +223 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'].value == 'event': +224 self._handleEvent(c, event.getDOMContainer()) +225 elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "message": +226 self._handleMessage(c, event.getDOMContainer()) +227 elif c.nodeType == xml.dom.Node.ELEMENT_NODE: +228 self._handlePrint(c, event.getDOMContainer()) +229 +230 keys = self.__tags.keys() +231 keys.sort() +232 for name in keys: +233 event.addStatistics(name.replace("__", ""), self.__tags[name]) +234 self.__tags = self._mergeStatistics(tags, self.__tags) +
235 +
236 - def _handleMessage(self, node, container): +
237 if node.attributes['priority'].value == "printraw": +238 t = self.__factory["__printraw"](self.__doc, container) +239 for n in node.childNodes: +240 if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE: +241 t.appendText(n.data) +242 else: +243 t = self.__factory["__print"](self.__doc, container) +244 for n in node.childNodes: +245 if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE: +246 t.appendText(n.data) +247 if node.attributes['priority'].value != "print": +248 t.setIcon(self.__config.getClass(node.attributes['priority'].value, "icn_dft")) +249 if self.__tags.has_key(node.attributes['priority'].value): +250 self.__tags[node.attributes['priority'].value] += 1 +251 else: +252 self.__tags[node.attributes['priority'].value] = 1 +
253 +
254 - def _handlePrint(self, node, container): +
255 if node.tagName == "__printraw": +256 t = self.__factory["__printraw"](self.__doc, container) +257 for n in node.childNodes: +258 if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE or n.nodeType == xml.dom.Node.TEXT_NODE: +259 t.appendText(n.data) +260 else: +261 t = self.__factory["__print"](self.__doc, container) +262 for n in node.childNodes: +263 if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE or n.nodeType == xml.dom.Node.TEXT_NODE: +264 t.appendText(n.data) +265 if node.tagName != "__print": +266 t.setIcon(self.__config.getClass(node.tagName, "icn_dft")) +267 if self.__tags.has_key(node.tagName): +268 self.__tags[node.tagName] += 1 +269 else: +270 self.__tags[node.tagName] = 1 +
271 +
272 - def _createSummary(self): +
273 # pylint: disable-msg=E1101 +274 if self.__xhtml_summary == None: +275 self.__xhtml_summary = Summary(self.__doc, self.__body) +276 self.__xhtml_summary.setTitle("Global Statistics") +277 keys = self.__tags.keys() +278 keys.sort() +279 for name in keys: +280 self.__xhtml_summary.addStatistics(name.replace("__", ""), self.__tags[name]) +
281 +282 +
283 - def _mergeStatistics(self, tags, newTags): +
284 for name in newTags.keys(): +285 if tags.has_key(name): +286 tags[name] += newTags[name] +287 else: +288 tags[name] = newTags[name] +289 return tags +
290 +
291 - def WriteToFile(self, filename): +
292 file_object = open(filename, "w") +293 file_object.write(codecs.BOM_UTF8) +294 file_object.write(self.__doc.toprettyxml(encoding="utf-8")) +295 file_object.close() +
296 +297 +298 @staticmethod +
299 - def forname(classname): +
300 r = re.match("^(?P<modname>(?:\w+\.?)*)\.(?P<classname>(\w+?))$", classname) +301 if r != None: +302 return getattr(__import__(r.groupdict()['modname'], [], [], r.groupdict()['classname']), r.groupdict()['classname']) +303 else: +304 raise Exception("Error retreiving module and classname for %s" % classname) +
305 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +