Ticket #53 (assigned defect)
Crashes when MusicBrainz includes partial information
| Reported by: | http://lool.myopenid.com/ | Owned by: | http://lool.myopenid.com/ |
|---|---|---|---|
| Priority: | minor | Milestone: | future |
| Component: | morituri | Version: | 0.1.1 |
| Keywords: | Cc: |
Description
Hey,
With a moderately patched morituri 0.1.1 (patches in other tickets), I get:
With one of my CDs:
Artist : Connick jr., Harry
Title : Harry Connick jr.
MusicBrainz? returns incomplete information and this crashes morituri:
Checking device /dev/sr0
Device /dev/sr0 is mounted, unmounting
CDDB disc id 6a092609
MusicBrainz? disc id Z.MBzLOPmHXetak7UQqgv9kToc0-
Traceback (most recent call last):
File "/usr/bin/rip", line 35, in <module>
sys.exit(main.main(sys.argv[1:]))
File "/usr/lib/python2.6/dist-packages/morituri/rip/main.py", line 12, in main
ret = c.parse(argv)
File "/usr/lib/python2.6/dist-packages/morituri/extern/command/command.py", line 329, in parse
return self.subCommands[command].parse(args[1:])
File "/usr/lib/python2.6/dist-packages/morituri/extern/command/command.py", line 329, in parse
return self.subCommands[command].parse(args[1:])
File "/usr/lib/python2.6/dist-packages/morituri/extern/command/command.py", line 300, in parse
ret = self.do(args)
File "/usr/lib/python2.6/dist-packages/morituri/rip/cd.py", line 116, in do
prog.metadata = prog.getMusicBrainz(ittoc, mbdiscid)
File "/usr/lib/python2.6/dist-packages/morituri/common/program.py", line 295, in getMusicBrainz
metadatas = musicbrainz(mbdiscid)
File "/usr/lib/python2.6/dist-packages/morituri/common/program.py", line 144, in musicbrainz
ret.append(getMetadata(release))
File "/usr/lib/python2.6/dist-packages/morituri/common/program.py", line 78, in getMetadata
metadata.mbid = urlparse.urlparse(release.id)[2].split("/")[-1]
File "/usr/lib/python2.6/urlparse.py", line 129, in urlparse
tuple = urlsplit(url, scheme, allow_fragments)
File "/usr/lib/python2.6/urlparse.py", line 168, in urlsplit
i = url.find(':')
AttributeError?: 'NoneType?' object has no attribute 'find'
It has:
CDDB disc id 6a092609
MusicBrainz? disc id Z.MBzLOPmHXetak7UQqgv9kToc0-
I see morituri had to deal with such a CD in the past as a comment says:
# Arid - Under the Cold Street Lights has getId() None
but unfortunately, this is not enough for this CD.
I've started changing morituri to proceed with the missing data:
- release.id is None so this in DiscMetadata?.getMetadata() fails:
metadata.mbid = urlparse.urlparse(release.id)[2].split("/")[-1]
- release.artist.id is also None so this in DiscMetadata?.getMetadata() fails:
metadata.mbidArtist = urlparse.urlparse(release.artist.id)[2].split("/")[-1]
- t.id is None so this in DiscMetadata?.getMetadata() fails:
urlparse.urlparse(t.id)[2].split("/")[-1]
- self.metadata.sortName is None in Program.getPath() so this fails:
vs? = filterForPath(self.metadata.tracks[i - 1].sortName)
but when I reached Program.getTagList():
mbidTrack = self.metadata.tracks[number - 1].mbid
failing because there is no mbid, I stopped because I realized this would mean some tags would be missing from the encoded files.
So instead morituri should probably stop or barf when there is not enough MusicBrainz? information, perhaps with a link to edit it.
Cheers,
Change History
comment:2 Changed 2 years ago by http://thomasvs.myopenid.com/
- Owner changed from https://thomasvs.myopenid.com/ to http://lool.myopenid.com/
- Status changed from new to assigned
- Milestone changed from 0.1.2 to future
I can not find your disc on musicbrainz:
http://musicbrainz.org/cdtoc/Z.MBzLOPmHXetak7UQqgv9kToc0-
gives not found.
comment:3 Changed 2 years ago by https://www.google.com/accounts/o8/id?id=aitoawkjj0i4mbidagqs2qf3kw1vv9etzkeprge
Hello Thomas,
I'm looking at the same error with a disc of mine:
me@localhost:~/Music$ rip cd rip -o6
Checking device /dev/sr0
CDDB disc id 890c5a0a
MusicBrainz disc id UYO3_NdSKvjN_k1m3c.EAii40RA-
Traceback (most recent call last):
File "/usr/bin/rip", line 35, in <module>
sys.exit(main.main(sys.argv[1:]))
File "/usr/lib/python2.7/dist-packages/morituri/rip/main.py", line 12, in main
ret = c.parse(argv)
File "/usr/lib/python2.7/dist-packages/morituri/extern/command/command.py", line 329, in parse
return self.subCommands[command].parse(args[1:])
File "/usr/lib/python2.7/dist-packages/morituri/extern/command/command.py", line 329, in parse
return self.subCommands[command].parse(args[1:])
File "/usr/lib/python2.7/dist-packages/morituri/extern/command/command.py", line 300, in parse
ret = self.do(args)
File "/usr/lib/python2.7/dist-packages/morituri/rip/cd.py", line 116, in do
prog.metadata = prog.getMusicBrainz(ittoc, mbdiscid)
File "/usr/lib/python2.7/dist-packages/morituri/common/program.py", line 295, in getMusicBrainz
metadatas = musicbrainz(mbdiscid)
File "/usr/lib/python2.7/dist-packages/morituri/common/program.py", line 144, in musicbrainz
ret.append(getMetadata(release))
File "/usr/lib/python2.7/dist-packages/morituri/common/program.py", line 78, in getMetadata
metadata.mbid = urlparse.urlparse(release.id)[2].split("/")[-1]
File "/usr/lib/python2.7/urlparse.py", line 134, in urlparse
tuple = urlsplit(url, scheme, allow_fragments)
File "/usr/lib/python2.7/urlparse.py", line 173, in urlsplit
i = url.find(':')
AttributeError: 'NoneType' object has no attribute 'find'
This is with Morituri 0.1.1, as is shipped with Ubuntu 11.04, but if you need me to poke around I'll be happy to grab the svn version and experiment with this disc - just tell me what you need to know.
comment:4 Changed 15 months ago by https://www.google.com/accounts/o8/id?id=aitoawk5srcm6yjgqjx9oa1ruownfuzsldd8l5w
Hello Thomas,
I have seen this as well for a release ( http://musicbrainz.org/release/31ecf305-6ed6-44a7-a53d-0e455e3e0e38) of which only one CD of two was known to musicbrainz. I have since added the second CD but I do not think it is associated with the CDTOC (uBk5cnnbgJsZ9LEn9XxjeRV7p0A-) yet.
-Jens
comment:5 Changed 6 weeks ago by https://www.google.com/accounts/o8/id?id=aitoawli0bb_q9adkor29jwj-4jv_3uu5keerzu
I
I have seen a similar problem with a multi-CD edition. The first CD was properly recognised by morituri; the second one did not have a MusicBrainz? ID. I added the tags in MusicBrainz? (without subscription) and now morituri shows a similar Traceback as the OP.
The CD in question is:
http://musicbrainz.org/cdstub/z61lIcOES2Cp6llH43GaghrtOM0-
Here is the console output after I added the stub in MusicBrainz?:
Checking device /dev/sr0
CDDB disc id b00bfc0c
MusicBrainz? disc id z61lIcOES2Cp6llH43GaghrtOM0-
Traceback (most recent call last):
File "/usr/bin/rip", line 35, in <module>
sys.exit(main.main(sys.argv[1:]))
File "/usr/lib/python2.7/dist-packages/morituri/rip/main.py", line 14, in main
ret = c.parse(argv)
File "/usr/lib/python2.7/dist-packages/morituri/rip/main.py", line 82, in parse
logcommand.LogCommand?.parse(self, argv)
File "/usr/lib/python2.7/dist-packages/morituri/extern/command/command.py", line 335, in parse
return self.subCommands[command].parse(args[1:])
File "/usr/lib/python2.7/dist-packages/morituri/extern/command/command.py", line 335, in parse
return self.subCommands[command].parse(args[1:])
File "/usr/lib/python2.7/dist-packages/morituri/extern/command/command.py", line 304, in parse
ret = self.do(args)
File "/usr/lib/python2.7/dist-packages/morituri/rip/cd.py", line 148, in do
prog.metadata = prog.getMusicBrainz(ittoc, mbdiscid)
File "/usr/lib/python2.7/dist-packages/morituri/common/program.py", line 330, in getMusicBrainz
metadatas = musicbrainz(mbdiscid)
File "/usr/lib/python2.7/dist-packages/morituri/common/program.py", line 145, in musicbrainz
ret.append(getMetadata(release))
File "/usr/lib/python2.7/dist-packages/morituri/common/program.py", line 78, in getMetadata
metadata.mbid = urlparse.urlparse(release.id)[2].split("/")[-1]
File "/usr/lib/python2.7/urlparse.py", line 140, in urlparse
tuple = urlsplit(url, scheme, allow_fragments)
File "/usr/lib/python2.7/urlparse.py", line 179, in urlsplit
i = url.find(':')
AttributeError?: 'NoneType?' object has no attribute 'find'
BR
--
Danai

I have not been able to figure out what it means when this info is missing, or where it can be seen, or where to fill it in. Any idea?