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

Source Code for Module helium.logger

+
+  1  #============================================================================  
+  2  #Name        : logger.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  # Logger module 
+ 22  # Description : Port to python of the ISIS::Logger3 perl module 
+ 23  # 
+ 24  # 1.0.0 (13/12/2006) 
+ 25  #  - First version of the module. 
+ 26  ## 
+ 27   
+ 28  # pylint: disable-msg=E1101,E1103 
+ 29   
+ 30  import codecs 
+ 31  import xml.dom.minidom 
+ 32  import datetime 
+ 33  from os import popen 
+ 34  import traceback 
+ 35   
+ 36  # 
+ 37  # This is an Internal helper call.  
+ 38  # 
+
39 -class _CustomizePrint(object): +
40 + 41 ## + 42 # Initialise the instance content + 43 # @param logger a Logger instance + 44 # @param name method name (e.g. Print, Error), could be any strings +
45 - def __init__(self, logger, name): +
46 self.__logger = logger + 47 self.__name = name +
48 + 49 ## + 50 # Make this object callable. Call _print from the logger instance. + 51 # @params *args a list of arguments +
52 - def __call__(self, *args): +
53 self.__logger._print(self.__name, args) +
54 + 55 ## + 56 # The Logger enables to create xml logging in Python. + 57 # +
58 -class Logger(object): +
59 + 60 ## + 61 # Constructor of the Logger. +
62 - def __init__(self): +
63 self.__step = 1 + 64 self.__doc = xml.dom.minidom.Document() + 65 self.__lognode = self.__doc.createElementNS("", "__log") + 66 self.__header = self.__doc.createElementNS("", "__header") + 67 self.__footer = self.__doc.createElementNS("", "__footer") + 68 self.__summary = self.__doc.createElementNS("", "__summary") + 69 self.__lognode.appendChild(self.__header) + 70 self.__lognode.appendChild(self.__summary) + 71 self.__lognode.appendChild(self.__footer) + 72 self.__lognode.setAttributeNS("", "date", "%s" % datetime.datetime.now().ctime()) + 73 self.__footer.setAttributeNS("", "title", "") + 74 self.__footer.setAttributeNS("", "subtitle", "") + 75 self.__doc.appendChild(self.__lognode) + 76 self.__build = self.__doc.createElementNS("", "build") + 77 self.__lognode.appendChild(self.__build) + 78 self.__current_node = self.__build + 79 self.__stack = [] + 80 self.__verbose = True +
81 #<__log date="Wed Dec 6 03:07:25 2006"> + 82 + 83 ## + 84 # Set the url of interface to use. +
85 - def SetInterface(self, url): +
86 self.__lognode.setAttributeNS("", "interface", url) +
87 + 88 ## + 89 # Enable/Disable shell output + 90 # @param v boolean to set the logger output +
91 - def SetVerbose(self, v): +
92 self.__verbose = v +
93 + 94 ## + 95 # Set the title of the document + 96 # @param title the title to set +
97 - def SetTitle(self, title): +
98 self.__header.setAttributeNS("", "title", title) +
99 +100 ## +101 # Set the subtitle of the document +102 # @param subtitle the subtitle to set +
103 - def SetSubTitle(self, title): +
104 self.__header.setAttributeNS("", "subtitle", title) +105 +106 ## +107 # Set the sumamry title +108 # @param title the title to set +
109 - def SetSummaryTitle(self, title): +
110 self.__summary.setAttributeNS("", "title", title) +
111 +112 ## +113 # Creates a summary couple. +114 # @param tag the description +115 # @param value the value +
116 - def AddSummaryElement(self, tag, value): +
117 e = self.__doc.createElementNS("", "__elmt") +118 e.setAttributeNS("", "tag", tag) +119 e.setAttributeNS("", "val", value) +120 self.__summary.appendChild(e) +
121 +122 +123 ## +124 # Open a MainContent section. +125 # @param title title of the MainContent section +
126 - def OpenMainContent(self, title=""): +
127 self.__stack.append(self.__current_node) +128 n = self.__doc.createElementNS("", "task") +129 n.setAttributeNS("", "name", title) +130 n.setAttributeNS("", "type", "maincontent") +131 n.setAttributeNS("", "time", datetime.datetime.now().ctime()) +132 self.__current_node.appendChild(n) +133 self.__current_node = n +134 if self.__verbose: +135 print ("---------------------------------------------------------------------") +136 print (" %s" % title) +137 print ("---------------------------------------------------------------------") +
138 +139 +140 ## +141 # Close the current main content section. +142 # Make sure you have closed other Event/Section first +
143 - def CloseMainContent(self): +
144 if self.__current_node.nodeName != "task" and not (self.__current_node.attributes.has_key('type') and self.__current_node.attributes['type']=="maincontent"): +145 raise Exception("not closing a 'maincontent' typed node") +146 self.__current_node = self.__stack.pop() +
147 +148 +149 ## +150 # Create an Event section (can be opened/closed) +151 # @param title title of the MainContent section +
152 - def OpenEvent(self, title=""): +
153 self.__stack.append(self.__current_node) +154 n = self.__doc.createElementNS("", "task") +155 n.setAttributeNS("", "name", title) +156 n.setAttributeNS("", "type", "event") +157 n.setAttributeNS("", "time", datetime.datetime.now().ctime()) +158 self.__current_node.appendChild(n) +159 self.__current_node = n +160 if self.__verbose: +161 print ("---------------------------------------------------------------------") +162 print (" + %s" % title) +
163 +
164 - def SetCustomOutputer(self, type, classname, config = None): +
165 n = self.__doc.createElementNS("", "__customoutputer") +166 n.setAttributeNS("", "type", type) +167 n.setAttributeNS("", "module", classname) +168 if config != None: +169 n.appendChild(config) +170 self.__lognode.appendChild(n) +
171 +172 ## +173 # Close the current Event +174 # Make sure you have closed other Event/Section first +
175 - def CloseEvent(self): +
176 if self.__current_node.nodeName != "task" and (self.__current_node.attributes.has_key('type') and self.__current_node.attributes['type']=="event"): +177 raise Exception("not closing a 'event' typed node") +178 self.__current_node = self.__stack.pop() +
179 +180 ## +181 # __getattribute__ has been overrided to enable dynamic messaging. +182 # @param attr the name of the method (or attribute...) +
183 - def __getattribute__(self, attr): +
184 try: +185 return object.__getattribute__(self, attr) +186 except AttributeError: +187 return _CustomizePrint(self, attr) +
188 +189 ## +190 # Generic method that handle the print in the XML document +191 # @param kind type of output +192 # @param *args a list of arguments (must be strings) +
193 - def _print(self, kind, *args): +
194 output = u"".join(map(lambda x: u"%s" % x, list(*args))) +195 nodetype = kind.lower() +196 msgtype = "" +197 if nodetype != "print" and nodetype != "info" and nodetype != "debug": +198 msgtype = "%s:" % nodetype.upper() +199 if self.__verbose: +200 print "%s %s" % (msgtype, output.encode('utf-8')) +201 +202 +203 n = self.__doc.createElementNS("", "message") +204 n.setAttributeNS("", "priority", nodetype) +205 #n.setAttributeNS("", "time", datetime.datetime.now().ctime()) +206 n.appendChild(self.__doc.createCDATASection(output)) +207 self.__current_node.appendChild(n) +
208 # nodetype = kind.lower() +209 # if kind.lower() != "print" and kind.lower() != "printraw": +210 # nodename = kind.lower() +211 # +212 # if nodename=="__print" and self.__current_node.lastChild!=None and self.__current_node.lastChild.nodeName == nodename: +213 # self.__current_node.lastChild.appendChild(self.__doc.createTextNode("".join(*args).decode('iso-8859-1'))) +214 # else: +215 # n = self.__doc.createElementNS("", nodename) +216 # n.setAttributeNS("", "step", "%d" % self.__step) +217 # self.__step += 1 +218 # n.setAttributeNS("", "time", datetime.datetime.now().ctime()) +219 # text_content = "".join(map(lambda x: str(x), list(*args))).decode('iso-8859-1') +220 # n.appendChild(self.__doc.createTextNode(text_content)) +221 # self.__current_node.appendChild(n) +222 +223 +224 ## +225 # +
226 - def SetFooterTitle(self, title): +
227 self.__footer.attributes['title'] = title +
228 +
229 - def SetFooterSubTitle(self, subtitle): +
230 self.__footer.attributes['subtitle'] = subtitle +
231 +
232 - def Die(self, title, subtitle, exception): +
233 self.SetFooterTitle(title) +234 self.SetFooterSubTitle("%s\nException raised: %s\n%s" % (subtitle, exception, traceback.format_exc())) +
235 +236 ## +237 # Write the DOM tree into a file. +238 # @param filename the file to write in. +
239 - def WriteToFile(self, filename): +
240 file_object = open(filename, "w") +241 file_object.write(codecs.BOM_UTF8) +242 file_object.write(self.__doc.toprettyxml(encoding = "utf-8")) +243 file_object.close() +244 +245 +246 ## +247 # Write the DOM tree into a file. +248 # @param filename the file to write in. +
249 - def __str__(self): +
250 return self.__doc.toprettyxml(encoding="utf-8") +251 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +