1#!/usr/bin/python 2 3import re 4 5class Parser(object): 6 7 DELIMITER_LEN = 20 8 9 def __init__(self, scriptStdout, 10 scriptStderr, 11 returnCode): 12 self.scriptStdout = scriptStdout 13 self.scriptStderr = scriptStderr 14 self.returnCode = returnCode 15 16 def parseNapiStats(self): 17 """ 18 Extracts napi stats from the output stream 19 """ 20 tokens = [ 'OK', 'UNAV', 'SKIP', 'CONV', 21 'COVER_OK', 'COVER_UNAV', 'COVER_SKIP', 22 'NFO_OK', 'NFO_UNAV', 'NFO_SKIP', 'TOTAL', 'CONV_CHARSET' ] 23 results = {} 24 for token in tokens: 25 m = re.search(r'{} -> (\d+)'.format(token), 26 self.scriptStdout) 27 results[token.lower()] = int(m.group(1) if m else 0) 28 return results 29 30 def stdoutContains(self, regex): 31 return re.search(regex, self.scriptStdout) 32 33 def stderrContains(self, regex): 34 return re.search(regex, self.scriptStderr) 35 36 def isSuccess(self): 37 return self.returnCode == 0 38 39 def hasErrors(self): 40 return len(self.scriptStderr) or not self.isSuccess() 41 42 def printStdout(self): 43 print "STDOUT" 44 print self.scriptStdout 45 print "=" * self.DELIMITER_LEN 46 47 def printStderr(self): 48 print "STDERR" 49 print self.scriptStderr 50 print "=" * self.DELIMITER_LEN 51 52