* morituri/program/cdrdao.py:
Add logCategory to CDRDAO tasks. Remove errors from parser, set them publically on task. Properly raise exceptions on data cd's with correct stack origin.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2010-11-08 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
|
* morituri/program/cdrdao.py:
|
||||||
|
Add logCategory to CDRDAO tasks.
|
||||||
|
Remove errors from parser, set them publically on task.
|
||||||
|
Properly raise exceptions on data cd's with correct stack origin.
|
||||||
|
|
||||||
2010-07-08 Thomas Vander Stichele <thomas at apestaart dot org>
|
2010-07-08 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
* morituri/common/program.py:
|
* morituri/common/program.py:
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ class OutputParser(object, log.Loggable):
|
|||||||
def __init__(self, taskk, session=None):
|
def __init__(self, taskk, session=None):
|
||||||
self._buffer = "" # accumulate characters
|
self._buffer = "" # accumulate characters
|
||||||
self._lines = [] # accumulate lines
|
self._lines = [] # accumulate lines
|
||||||
self._errors = [] # accumulate error lines
|
|
||||||
self._state = 'START'
|
self._state = 'START'
|
||||||
self._frames = None # number of frames
|
self._frames = None # number of frames
|
||||||
self._track = None # which track are we analyzing?
|
self._track = None # which track are we analyzing?
|
||||||
@@ -166,8 +165,12 @@ class OutputParser(object, log.Loggable):
|
|||||||
self._buffer = ""
|
self._buffer = ""
|
||||||
for line in lines:
|
for line in lines:
|
||||||
self.log('Parsing %s', line)
|
self.log('Parsing %s', line)
|
||||||
if line.startswith('ERROR:'):
|
m = _ERROR_RE.search(line)
|
||||||
self._task.exception = ProgramError(line)
|
if m:
|
||||||
|
error = m.group('error')
|
||||||
|
self._task.errors.append(error)
|
||||||
|
self.debug('Found ERROR: output: %s', error)
|
||||||
|
self._task.exception = ProgramError(error)
|
||||||
self._task.abort()
|
self._task.abort()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -196,7 +199,7 @@ class OutputParser(object, log.Loggable):
|
|||||||
m = _ERROR_RE.search(line)
|
m = _ERROR_RE.search(line)
|
||||||
if m:
|
if m:
|
||||||
error = m.group('error')
|
error = m.group('error')
|
||||||
self._errors.append(error)
|
self._task.errors.append(error)
|
||||||
|
|
||||||
|
|
||||||
def _parse_TRACK(self, line):
|
def _parse_TRACK(self, line):
|
||||||
@@ -240,11 +243,12 @@ class CDRDAOTask(task.Task):
|
|||||||
I am a task base class that runs CDRDAO.
|
I am a task base class that runs CDRDAO.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'CDRDAOTask'
|
||||||
description = "Reading TOC..."
|
description = "Reading TOC..."
|
||||||
options = None
|
options = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._errors = []
|
self.errors = []
|
||||||
|
|
||||||
def start(self, runner):
|
def start(self, runner):
|
||||||
task.Task.start(self, runner)
|
task.Task.start(self, runner)
|
||||||
@@ -264,6 +268,7 @@ class CDRDAOTask(task.Task):
|
|||||||
|
|
||||||
self.debug('Started cdrdao with pid %d and options %r',
|
self.debug('Started cdrdao with pid %d and options %r',
|
||||||
self._popen.pid, self.options)
|
self._popen.pid, self.options)
|
||||||
|
self.debug('command: cdrdao %s', ' '.join(self.options))
|
||||||
|
|
||||||
self.runner.schedule(1.0, self._read, runner)
|
self.runner.schedule(1.0, self._read, runner)
|
||||||
|
|
||||||
@@ -281,7 +286,7 @@ class CDRDAOTask(task.Task):
|
|||||||
self.log("read from stderr: %s", ret)
|
self.log("read from stderr: %s", ret)
|
||||||
self.readbyteserr(ret)
|
self.readbyteserr(ret)
|
||||||
|
|
||||||
if self._popen.poll() is None:
|
if self._popen.poll() is None and self.runner:
|
||||||
# not finished yet
|
# not finished yet
|
||||||
self.runner.schedule(1.0, self._read, runner)
|
self.runner.schedule(1.0, self._read, runner)
|
||||||
return
|
return
|
||||||
@@ -290,20 +295,25 @@ class CDRDAOTask(task.Task):
|
|||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.debug('exception during _read()')
|
self.debug('exception during _read()')
|
||||||
self.debug(log.getExceptionMessage(e))
|
self.debug(log.getExceptionMessage(e))
|
||||||
self.exception = e
|
self.setException(e)
|
||||||
self.stop()
|
self.stop()
|
||||||
|
|
||||||
def _done(self):
|
def _done(self):
|
||||||
self.debug('Return code was %d', self._popen.returncode)
|
assert self._popen.returncode is not None, "No returncode"
|
||||||
|
|
||||||
|
if self._popen.returncode >= 0:
|
||||||
|
self.debug('Return code was %d', self._popen.returncode)
|
||||||
|
else:
|
||||||
|
self.debug('Terminated with signal %d',
|
||||||
|
-self._popen.returncode)
|
||||||
|
|
||||||
self.setProgress(1.0)
|
self.setProgress(1.0)
|
||||||
|
|
||||||
if self._popen.returncode != 0:
|
if self._popen.returncode != 0:
|
||||||
if self._errors:
|
if self.errors:
|
||||||
self.exception = DeviceOpenException(
|
raise DeviceOpenException("\n".join(self.errors))
|
||||||
"\n".join(self._errors))
|
|
||||||
else:
|
else:
|
||||||
self.exception = ProgramFailedException(
|
raise ProgramFailedException(self._popen.returncode)
|
||||||
self._popen.returncode)
|
|
||||||
else:
|
else:
|
||||||
self.done()
|
self.done()
|
||||||
|
|
||||||
@@ -313,7 +323,7 @@ class CDRDAOTask(task.Task):
|
|||||||
def abort(self):
|
def abort(self):
|
||||||
self.debug('Aborting, sending SIGTERM to %d', self._popen.pid)
|
self.debug('Aborting, sending SIGTERM to %d', self._popen.pid)
|
||||||
os.kill(self._popen.pid, signal.SIGTERM)
|
os.kill(self._popen.pid, signal.SIGTERM)
|
||||||
self.stop()
|
# self.stop()
|
||||||
|
|
||||||
def readbytesout(self, bytes):
|
def readbytesout(self, bytes):
|
||||||
"""
|
"""
|
||||||
@@ -341,6 +351,7 @@ class DiscInfoTask(CDRDAOTask):
|
|||||||
@type sessions: int
|
@type sessions: int
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'DiscInfoTask'
|
||||||
description = "Scanning disc..."
|
description = "Scanning disc..."
|
||||||
table = None
|
table = None
|
||||||
sessions = None
|
sessions = None
|
||||||
@@ -373,7 +384,7 @@ class DiscInfoTask(CDRDAOTask):
|
|||||||
m = _ERROR_RE.search(line)
|
m = _ERROR_RE.search(line)
|
||||||
if m:
|
if m:
|
||||||
error = m.group('error')
|
error = m.group('error')
|
||||||
self._errors.append(error)
|
self._task.errors.append(error)
|
||||||
|
|
||||||
def done(self):
|
def done(self):
|
||||||
pass
|
pass
|
||||||
@@ -388,6 +399,7 @@ class ReadSessionTask(CDRDAOTask):
|
|||||||
@type table: L{table.Table}
|
@type table: L{table.Table}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'ReadSessionTask'
|
||||||
description = "Reading session"
|
description = "Reading session"
|
||||||
table = None
|
table = None
|
||||||
extraOptions = None
|
extraOptions = None
|
||||||
@@ -454,6 +466,7 @@ class ReadTableSessionTask(ReadSessionTask):
|
|||||||
@type table: L{table.Table}
|
@type table: L{table.Table}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'ReadTableSessionTask'
|
||||||
description = "Scanning indexes"
|
description = "Scanning indexes"
|
||||||
|
|
||||||
class ReadTOCSessionTask(ReadSessionTask):
|
class ReadTOCSessionTask(ReadSessionTask):
|
||||||
@@ -464,6 +477,7 @@ class ReadTOCSessionTask(ReadSessionTask):
|
|||||||
@type table: L{table.Table}
|
@type table: L{table.Table}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'ReadTOCSessionTask'
|
||||||
description = "Reading TOC"
|
description = "Reading TOC"
|
||||||
extraOptions = ['--fast-toc', ]
|
extraOptions = ['--fast-toc', ]
|
||||||
|
|
||||||
@@ -481,6 +495,7 @@ class ReadAllSessionsTask(task.MultiSeparateTask):
|
|||||||
@type table: L{table.Table}
|
@type table: L{table.Table}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'ReadAllSessionsTask'
|
||||||
table = None
|
table = None
|
||||||
_readClass = None
|
_readClass = None
|
||||||
|
|
||||||
@@ -522,6 +537,7 @@ class ReadTableTask(ReadAllSessionsTask):
|
|||||||
@type table: L{table.Table}
|
@type table: L{table.Table}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'ReadTableTask'
|
||||||
description = "Scanning indexes..."
|
description = "Scanning indexes..."
|
||||||
_readClass = ReadTableSessionTask
|
_readClass = ReadTableSessionTask
|
||||||
|
|
||||||
@@ -533,6 +549,7 @@ class ReadTOCTask(ReadAllSessionsTask):
|
|||||||
@type table: L{table.Table}
|
@type table: L{table.Table}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logCategory = 'ReadTOCTask'
|
||||||
description = "Reading TOC..."
|
description = "Reading TOC..."
|
||||||
_readClass = ReadTOCSessionTask
|
_readClass = ReadTOCSessionTask
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user