from flac_archive.tags import Tags
class SubprocessError(Exception):
- def __init__(self, status, stderr=None):
+ def __init__(self, status, command=None, stderr=None):
+ if command is None:
+ command_msg = None
+ else:
+ command_msg = ': ' + ' '.join(command)
if status < 0:
- msg = 'exited due to signal %d'
+ msg = 'exited due to signal %d%s'
else:
- msg = 'exit status %d'
- Exception.__init__(self, msg % (status,))
+ msg = 'exit status %d%s'
+ Exception.__init__(self, msg % (abs(status), command_msg))
self.status = status
+ self.command = command
self.stderr = stderr
def get_tags(fn):
tags = Tags()
- p = Popen(['metaflac', '--no-utf8-convert', '--export-tags-to=-', fn],
- stdout=PIPE)
+
+ command = ['metaflac', '--no-utf8-convert', '--export-tags-to=-', fn]
+ p = Popen(command, stdout=PIPE)
tags.load(p.stdout)
status = p.wait()
if status != 0:
- raise SubprocessError(status, p.stderr)
+ raise SubprocessError(status, command=command, stderr=p.stderr)
return tags
all_tags = {}
# Build the collated result in this Tags object.
coll_tags = Tags()
+ # XXX The Tags interface is horrible. It's gotta be almost 10 years since
+ # I wrote it, so not surprising...
for fn in filenames:
tags = get_tags(fn)
track_tags = tags.get('TRACKNUMBER')
if len(track_tags) != 1:
- raise Exception('bogus TRACKNUMBER %s for %s' % (track_tags, fn))
+ sys.stderr.write('bogus TRACKNUMBER %s: %s\n' % (track_tags, fn))
+ return 3
track = int(track_tags[0])
for tag, values in tags._global.iteritems():
for value in values:
for track, tags in coll_tags._tracks.iteritems():
del tags[tag]
print '\n'.join(coll_tags.all())
+ return 0
def main(args):
if len(args) < 3: