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