buildframework/helium/tools/relnotes/readHTML.py
changeset 1 be27ed110b50
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/relnotes/readHTML.py	Wed Oct 28 14:39:48 2009 +0000
@@ -0,0 +1,142 @@
+#============================================================================ 
+#Name        : readHTML.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#All rights reserved.
+#This component and the accompanying materials are made available
+#under the terms of the License "Eclipse Public License v1.0"
+#which accompanies this distribution, and is available
+#at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+#Initial Contributors:
+#Nokia Corporation - initial contribution.
+#
+#Contributors:
+#
+#Description:
+#===============================================================================
+
+# Name: readHTML.py
+# Synopsis: This script creates a CSV file from the Log File Summary (.html)
+
+import htmllib
+import sys
+import formatter
+import re
+
+class HTMLComponent(object):
+    """
+    Represents a component in the log file summary
+    """
+    def __init__(self):
+        self._name = ''
+        self._errorCount = 0
+        self._warningCount = 0
+        
+    def getCSV(self):
+        return self._name + ',' + str(self._errorCount) + ',' + str(self._warningCount)
+        
+    def __setName(self, n):
+        self._name = n
+    def __setErrorCount(self, n):
+        self._errorCount = n
+    def __setWarningCount(self, n):
+        self._warningCount = n
+        
+    name = property(None, __setName)    
+    errorCount = property(None, __setErrorCount)
+    warningCount = property(None, __setWarningCount)
+
+class LogHTMLParser(htmllib.HTMLParser):
+    """
+    Parse the scan2log HTML file into CSV
+    """
+    def __init__(self, verbose=0):
+        self.anchors = {}
+        f = formatter.NullFormatter()
+        htmllib.HTMLParser.__init__(self, f, verbose)
+        
+        self.state = -1 #represents column, 0 is first
+        self.printFlag = False
+        self.errorCount = 0
+        self.warningCount = 0
+        
+        self._components = []
+        self.component = None
+        
+    def __getComponents(self):
+        return self._components
+        
+    components = property(__getComponents)
+        
+    def handle_data(self, text):
+        text = text.strip()
+        
+        #ignore plain text links that appear eg. [9]
+        p = re.compile('\[[0-9]*\]')
+        if not text or p.match(text):
+            return
+      
+        #start of area to parse
+        if (text == 'Component'):
+            self.state = 0
+  
+        #end of area to parse
+        if (text == 'By Command'):
+            self.state = -1
+          
+        #reset column if we get lost
+        #if (self.state > 0 and not text.isdigit()):
+        #    self.state = 0
+        
+        if (self.state == 0):
+            self.component = HTMLComponent()
+            self.component.name = text
+        if (text.isdigit() and self.state == 2):
+            self.errorCount += int(text)
+            self.component.errorCount = text
+        if (text.isdigit() and self.state == 3):
+            self.warningCount += int(text)
+            self.component.warningCount = text
+            
+        #if there are more than/ equal 5 errors or 50 warnings we print this row
+        if (text.isdigit() and ((self.state == 2 and (int(text) >= 5)) or 
+          (self.state == 3 and (int(text) >= 50)))):
+            self.printFlag = True
+
+        if (self.state == 5):
+            if (self.printFlag):                
+                self.components.append(self.component)
+                
+            self.printFlag = False
+          
+        if (self.state >= 0):
+            self.state += 1
+            self.state %= 6
+        
+def main():    
+    if len(sys.argv) != 3:
+        print "Usage: readHTML.pl LogFile.html errors.csv"
+        sys.exit(1)
+    
+    parser = LogHTMLParser()
+    
+    inputFile = file( sys.argv[1], 'rb' )
+    outFile = file( sys.argv[2], 'w' )
+    
+    outFile.write("Component,Errors (more than 5),Warnings (more than 50)\n")
+
+    parser.feed(inputFile.read())
+
+    for c in parser.components:
+        outFile.write(c.getCSV() + "\n")
+    
+    outFile.write("Total," + str(parser.errorCount) + "," + str(parser.warningCount) + "\n")
+    
+    inputFile.close()
+    outFile.close()
+    parser.close()
+        
+if __name__ == '__main__' :
+    main()
\ No newline at end of file