You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.8 KiB

import traceback
from autotest_lib.tko import status_lib, utils as tko_utils
class parser(object):
"""
Abstract parser base class. Provides a generic implementation of the
standard parser interfaction functions. The derived classes must
implement a state_iterator method for this class to be useful.
"""
def start(self, job):
""" Initialize the parser for processing the results of
'job'."""
# initialize all the basic parser parameters
self.job = job
self.finished = False
self.line_buffer = status_lib.line_buffer()
# create and prime the parser state machine
self.state = self.state_iterator(self.line_buffer)
next(self.state)
def end(self, lines=[]):
""" Feed 'lines' into the parser state machine, signal to the
state machine that no more lines are forthcoming, and then
return a list of all the new test results produced."""
self.line_buffer.put_multiple(lines)
# run the state machine to clear out the buffer
self.finished = True
try:
return next(self.state)
except StopIteration:
msg = ("WARNING: parser was end()ed multiple times\n"
"Current traceback:\n" +
traceback.format_exc() +
"\nCurrent stack:\n" +
"".join(traceback.format_stack()))
tko_utils.dprint(msg)
return []
@staticmethod
def make_job(dir):
""" Create a new instance of the job model used by the
parser, given a results directory."""
raise NotImplementedError
def state_iterator(self, buffer):
""" A generator method that implements the actual parser
state machine. """
raise NotImplementedError