diff --git a/whipper/command/cd.py b/whipper/command/cd.py index 51ab60c..1d9c4e0 100644 --- a/whipper/command/cd.py +++ b/whipper/command/cd.py @@ -22,14 +22,12 @@ import argparse import cdio import os import glob -import urllib2 -import socket import sys import logging import gobject from whipper.command.basecommand import BaseCommand from whipper.common import ( - accurip, common, config, drive, program, task + accurip, config, drive, program, task ) from whipper.program import cdrdao, cdparanoia, utils from whipper.result import result @@ -145,16 +143,6 @@ class _CD(BaseCommand): "--cdr not passed") return -1 - # FIXME ????? - # Hackish fix for broken commit - offset = 0 - info = drive.getDeviceInfo(self.device) - if info: - try: - offset = self.config.getReadOffset(*info) - except KeyError: - pass - # now, read the complete index table, which is slower self.itable = self.program.getTable(self.runner, self.ittoc.getCDDBDiscId(), @@ -345,8 +333,11 @@ Log files will log the path to tracks relative to this directory. if os.path.exists(dirname): logs = glob.glob(os.path.join(dirname, '*.log')) if logs: - bye("output directory %s is a finished rip" % - dirname.encode('utf-8')) + msg = ("output directory %s is a finished rip" % + dirname.encode('utf-8')) + logger.critical(msg) + raise RuntimeError(msg) + exit else: sys.stdout.write("output directory %s already exists\n" % dirname.encode('utf-8')) diff --git a/whipper/command/main.py b/whipper/command/main.py index 553f7c8..6e02547 100644 --- a/whipper/command/main.py +++ b/whipper/command/main.py @@ -36,8 +36,13 @@ def main(): cmd.options.eject in ('failure', 'always')): eject_device(e.device) return 255 + except RuntimeError, e: + print(e) + return 1 + except KeyboardInterrupt: + return 2 except ImportError, e: - raise ImportError(e) + raise except task.TaskException, e: if isinstance(e.exception, ImportError): raise ImportError(e.exception) diff --git a/whipper/command/offset.py b/whipper/command/offset.py index c7b01fb..c1cac15 100644 --- a/whipper/command/offset.py +++ b/whipper/command/offset.py @@ -28,7 +28,6 @@ from whipper.command.basecommand import BaseCommand from whipper.common import accurip, common, config, drive from whipper.common import task as ctask from whipper.program import arc, cdrdao, cdparanoia, utils -from whipper.common import checksum from whipper.extern.task import task gobject.threads_init() diff --git a/whipper/common/accurip.py b/whipper/common/accurip.py index f862f77..9a259cc 100644 --- a/whipper/common/accurip.py +++ b/whipper/common/accurip.py @@ -34,6 +34,7 @@ logger = logging.getLogger(__name__) _CACHE_DIR = join(directory.cache_path(), 'accurip') + class _AccurateRipResponse(object): """ An AccurateRip response contains a collection of metadata identifying a @@ -144,6 +145,7 @@ def _download_entry(path): return None return resp.content + def _save_entry(raw_entry, path): logger.debug('saving AccurateRip entry to %s', path) # XXX: os.makedirs(exist_ok=True) in py3 @@ -155,6 +157,7 @@ def _save_entry(raw_entry, path): return open(path, 'wb').write(raw_entry) + def get_db_entry(path): """ Retrieve cached AccurateRip disc entry as array of _AccurateRipResponses. @@ -184,6 +187,7 @@ def _assign_checksums_and_confidences(tracks, checksums, responses): key=lambda t: t[0] ) + def _match_responses(tracks, responses): """ Match and save track accuraterip response checksums against @@ -203,13 +207,14 @@ def _match_responses(tracks, responses): 'track %d matched response %s in AccurateRip' ' database: %s crc %s confidence %s' % (i, r.cddbDiscId, v, track.AR[v]['DBCRC'], - track.AR[v]['DBConfidence']) + track.AR[v]['DBConfidence']) ) return any(( all([t.AR['v1']['DBCRC'] for t in tracks]), all([t.AR['v2']['DBCRC'] for t in tracks]) )) + def verify_result(result, responses, checksums): """ Verify track AccurateRip checksums against database responses. diff --git a/whipper/common/checksum.py b/whipper/common/checksum.py index b9d7434..56ed7b4 100644 --- a/whipper/common/checksum.py +++ b/whipper/common/checksum.py @@ -24,8 +24,6 @@ import wave from whipper.extern.task import task as etask -from whipper.program.arc import accuraterip_checksum - import logging logger = logging.getLogger(__name__) diff --git a/whipper/common/program.py b/whipper/common/program.py index 7d174b0..78cc368 100644 --- a/whipper/common/program.py +++ b/whipper/common/program.py @@ -613,10 +613,9 @@ class Program: common.FRAMES_PER_SECOND) for i, track in enumerate(self.result.tracks): - path = track.filename writeFile(track.filename, - (self.result.table.getTrackLength(i + 1) / - common.FRAMES_PER_SECOND)) + (self.result.table.getTrackLength(i + 1) / + common.FRAMES_PER_SECOND)) def writeCue(self, discName): assert self.result.table.canCue() diff --git a/whipper/image/image.py b/whipper/image/image.py index 71b7616..9554961 100644 --- a/whipper/image/image.py +++ b/whipper/image/image.py @@ -26,7 +26,6 @@ import os from whipper.common import encode from whipper.common import common -from whipper.common import checksum from whipper.image import cue, table from whipper.extern.task import task from whipper.program.soxi import AudioLengthTask diff --git a/whipper/program/arc.py b/whipper/program/arc.py index b5caebe..b5f41ad 100644 --- a/whipper/program/arc.py +++ b/whipper/program/arc.py @@ -6,10 +6,12 @@ logger = logging.getLogger(__name__) ARB = 'accuraterip-checksum' FLAC = 'flac' + def _execute(cmd, **redirects): logger.debug('executing %r', cmd) return Popen(cmd, **redirects) + def accuraterip_checksum(f, track_number, total_tracks, wave=False, v2=False): v = '--accuraterip-v1' if v2: diff --git a/whipper/test/test_common_accurip.py b/whipper/test/test_common_accurip.py index fb3ac10..b84ad5e 100644 --- a/whipper/test/test_common_accurip.py +++ b/whipper/test/test_common_accurip.py @@ -29,6 +29,7 @@ class TestAccurateRipResponse(TestCase): def setUp(self): self.cache_dir = mkdtemp(suffix='whipper_accurip_cache_test') accurip._CACHE_DIR = self.cache_dir + def cleanup(cachedir): chmod(cachedir, 0755) rmtree(cachedir) @@ -83,9 +84,9 @@ class TestAccurateRipResponse(TestCase): # XXX: test arc.py + class TestCalculateChecksums(TestCase): def test_returns_none_for_bad_files(self): - paths = ['/does/not/exist'] self.assertEquals( calculate_checksums(['/does/not/exist']), {'v1': [None], 'v2': [None]} @@ -93,6 +94,7 @@ class TestCalculateChecksums(TestCase): # TODO: test success when file exists + class TestVerifyResult(TestCase): @classmethod def setUpClass(cls): @@ -221,6 +223,7 @@ class TestVerifyResult(TestCase): 'DBMaxConfidenceCRC': '9cc1f32e', }) + class TestAccurateRipReport(TestCase): def setUp(self): sys.stdout = StringIO() diff --git a/whipper/test/test_common_program.py b/whipper/test/test_common_program.py index 3d22f13..2ba2a84 100644 --- a/whipper/test/test_common_program.py +++ b/whipper/test/test_common_program.py @@ -2,13 +2,9 @@ # vi:si:et:sw=4:sts=4:ts=4 -import os -import pickle - import unittest -from whipper.result import result -from whipper.common import program, accurip, mbngs, config +from whipper.common import program, mbngs, config from whipper.command.cd import DEFAULT_DISC_TEMPLATE