Пример #1
0
	def endElement(self, name):
		self.buffer = self.buffer.strip()
		if name == 'id':
			self.label.id = int(self.buffer)
		elif name in ('name', 'contactinfo', 'data_quality', 'profile', 'parentLabel'):
			if len(self.buffer) != 0:
				setattr(self.label, name, self.buffer)
		elif name == 'url':
			if len(self.buffer) != 0:
				self.label.urls.append(self.buffer)
		elif name == "label":
			if self.inElement['sublabels']:
				if len(self.buffer) != 0:
					self.label.sublabels.append(self.buffer)
			else:
				self.exporter.storeLabel(self.label)

				self.labelCounter += 1
				if self.stop_after > 0 and self.labelCounter >= self.stop_after:
					self.endDocument()
					if self.ignore_missing_tags and len(self.unknown_tags) > 0:
						print('Encountered some unknown Label tags: %s' % (self.unknown_tags))
					raise model.ParserStopError(self.labelCounter)

		self.inElement[name] = False
		self.buffer = ''
    def endElement(self, name):
        self.buffer = self.buffer.strip()
        if name == 'id':
            if not self.inElement['members']:
                self.artist.id = int(self.buffer)
        if name == 'name':
            if len(self.buffer) != 0:
                if self.inElement['namevariations']:
                    self.artist.namevariations.append(self.buffer)
                elif self.inElement['aliases']:
                    self.artist.aliases.append(self.buffer)
                elif self.inElement['groups']:
                    self.artist.groups.append(self.buffer)
                elif self.inElement['members']:
                    self.artist.members.append(self.buffer)
                else:
                    self.artist.name = self.buffer
        elif name == 'realname':
            if len(self.buffer) != 0:
                self.artist.realname = self.buffer
        elif name == 'profile':
            if len(self.buffer) != 0:
                self.artist.profile = self.buffer
        elif name == 'url':
            if len(self.buffer) != 0:
                self.artist.urls.append(self.buffer)
        elif name == 'data_quality':
            if len(self.buffer) != 0:
                self.artist.data_quality = self.buffer
        elif name == "artist":

            if self.artist.name:
                self.exporter.storeArtist(self.artist)
                global artistCounter
                artistCounter += 1
                if self.stop_after > 0 and artistCounter >= self.stop_after:
                    self.endDocument()
                    if self.ignore_missing_tags and len(self.unknown_tags) > 0:
                        print 'Encountered some unknown Artist tags: %s' % (
                            self.unknown_tags)
                    raise model.ParserStopError(artistCounter)
            else:
                sys.stderr.writelines(
                    "Ignoring Artist %s with no name. Dictionary: %s\n" %
                    (self.artist.id, self.artist.__dict__))

        self.buffer = ''
        self.inElement[name] = False
Пример #3
0
    def endElement(self, name):
        self.buffer = self.buffer.strip()
        if name == 'title':
            if len(self.buffer) != 0:
                if self.stack[-2] == 'master':
                    self.master.title = self.buffer
                if self.stack[-2] == 'video':
                    self.master.videos[-1].title = self.buffer
        if name == 'description':
            if len(self.buffer) != 0:
                if self.stack[-2] == 'video':
                    self.master.videos[-1].description = self.buffer
        elif name == 'main_release':
            if len(self.buffer) != 0:
                self.master.main_release = self.buffer
        elif name == 'year':
            if len(self.buffer) != 0:
                self.master.year = int(self.buffer)
        elif name == 'notes':
            if len(self.buffer) != 0:
                self.master.notes = self.buffer
        elif name == 'genre':
            if len(self.buffer) != 0:
                self.master.genres.append(self.buffer)
                #global genres
                #if not genres.has_key(self.buffer):
                #  genres[self.buffer] = Genre(self.buffer)
        elif name == 'style':
            if len(self.buffer) != 0:
                self.master.styles.append(self.buffer)
                #global styles
                #if not styles.has_key(self.buffer):
                #  styles[self.buffer] = Style(self.buffer)
        elif name == 'id':
            if len(self.buffer) != 0:
                self.master.artists[-1].id = int(self.buffer)
        elif name == 'name':
            if len(self.buffer) != 0:
                self.master.artists[-1].name = self.buffer
        elif name == 'anv':
            if self.stack[-3] == 'artists' and self.stack[-4] == 'master':
                if len(self.buffer) != 0:
                    self.master.artists[-1].anv = self.buffer
        elif name == 'join':
            if len(self.buffer) != 0:
                self.master.artists[-1].join = self.buffer
        elif name == 'role':
            if len(self.buffer) != 0:
                #print "ROLE PRE" + str(self.buffer)
                roles_list = re.findall('([^[,]+(?:\[[^]]+])?)+',
                                        self.buffer)  # thanks to jlatour
                #print "ROLE POST" + str(self.buffer)
                for role in roles_list:
                    role = role.strip()
                    lIndex = role.find('[')
                    if lIndex != -1:
                        rIndex = role.find(']')
                        description = role[lIndex + 1:rIndex]
                        role = (role[:lIndex].strip(), description)
                    self.master.extraartists[-1].roles.append(role)
        elif name == 'data_quality':
            if len(self.buffer) != 0:
                self.master.data_quality = self.buffer
        elif name == 'master':
            # end of tag
            len_a = len(self.master.artists)
            if len_a == 0:
                sys.stderr.writelines(
                    "Ignoring Master %s with no artist. Dictionary: %s\n" %
                    (self.master.id, self.master.__dict__))
            else:
                if len_a == 1:
                    self.master.artist = self.master.artists[0]
                else:
                    for j in self.master.artists:
                        self.master.artist += '%s %s ' % (j.name, j.join)
                    self.master.artist += self.master.artists[-1].name

                self.masterCounter += 1
                #'''PREPARE FOR DATABASE
                self.exporter.storeMaster(self.master)

                if self.stop_after > 0 and self.masterCounter >= self.stop_after:
                    self.endDocument()
                    if self.ignore_missing_tags and len(self.unknown_tags) > 0:
                        print 'Encountered some unknown Master tags: %s' % (
                            self.unknown_tags)
                    raise model.ParserStopError(self.masterCounter)

        if self.stack[-1] == name:
            self.stack.pop()
        self.buffer = ''
    def endElement(self, name):
        self.buffer = self.buffer.strip()

        # Track title
        if name == 'title' and self.stack[
                -2] == 'track' and 'sub_track' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].title = self.buffer

        # Release title
        if name == 'title' and self.stack[-2] == 'release':
            if len(self.buffer) != 0:
                self.release.title = self.buffer

        # Release Country
        elif name == 'country':
            if len(self.buffer) != 0:
                self.release.country = self.buffer

        # Release Date
        elif name == 'released':
            if len(self.buffer) != 0:
                self.release.released = self.buffer

        # Release Notes
        elif name == 'notes':
            if len(self.buffer) != 0:
                self.release.notes = self.buffer

        # Release Genre
        elif name == 'genre':
            if len(self.buffer) != 0:
                self.release.genres.append(self.buffer)

        # Release Style
        elif name == 'style':
            if len(self.buffer) != 0:
                self.release.styles.append(self.buffer)

        # Release Format Description
        elif name == 'description' and 'formats' in self.stack:
            if len(self.buffer) != 0:
                self.release.formats[-1].descriptions.append(self.buffer)

        # Release Quality
        elif name == 'data_quality':
            if len(self.buffer) != 0:
                self.release.data_quality = self.buffer

        # Company id
        elif name == 'id' and 'companies' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].id = self.buffer

        # Company name
        elif name == 'name' and 'companies' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].name = self.buffer

        # Company catno
        elif name == 'catno' and 'companies' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].catno = self.buffer

        # Company type
        elif name == 'entity_type' and 'companies' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].type = self.buffer

        # Company type name
        elif name == 'entity_type_name' and 'companies' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].type_name = self.buffer

        # Track extra artist id
        elif name == 'id' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                teaj = model.Extraartist()
                teaj.artist_id = self.buffer
                self.release.tracklist[-1].extraartists.append(teaj)

        # Release extra artist id
        elif name == 'id' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                eaj = model.Extraartist()
                eaj.artist_id = self.buffer
                self.release.extraartists.append(eaj)

        # Track artist id
        elif name == 'id' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                taj = model.ArtistJoin()
                taj.artist_id = self.buffer
                self.release.tracklist[-1].artistJoins.append(taj)

        # Release artist id
        elif name == 'id' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                aj = model.ArtistJoin()
                aj.artist_id = self.buffer
                self.release.artistJoins.append(aj)

        # Track extra artist name
        elif name == 'name' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[
                    -1].artist_name = self.buffer

        # Release extra artist name
        elif name == 'name' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].artist_name = self.buffer

        # Track artist name
        elif name == 'name' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artistJoins[
                    -1].artist_name = self.buffer

        # Release artist name
        elif name == 'name' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artistJoins[-1].artist_name = self.buffer

        # Track artist anv
        elif name == 'anv' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artistJoins[-1].anv = self.buffer

        # Track extra artist anv
        elif name == 'anv' and 'artist' in self.stack and 'track' in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[-1].anv = self.buffer

        # Release artist anv
        elif name == 'anv' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artistJoins[-1].anv = self.buffer

        # Release extra artist anv
        elif name == 'anv' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].anv = self.buffer

        # Track artist join
        elif name == 'join' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artistJoins[
                    -1].join_relation = self.buffer

        # Release artist join
        elif name == 'join' and 'artist' in self.stack and 'track' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artistJoins[-1].join_relation = self.buffer

        # Track extra artist role
        elif name == 'role' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                roles_list = re.findall('([^[,]+(?:\[[^]]+])?)+',
                                        self.buffer)  # thanks to jlatour
                for role in roles_list:
                    role = role.strip()
                    lIndex = role.find('[')
                    if lIndex != -1:
                        rIndex = role.find(']')
                        description = role[lIndex + 1:rIndex]
                        role = (role[:lIndex].strip(), description)
                    self.release.tracklist[-1].extraartists[-1].roles.append(
                        role)

        # Release extra artist role
        elif name == 'role' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                roles_list = re.findall('([^[,]+(?:\[[^]]+])?)+',
                                        self.buffer)  # thanks to jlatour
                for role in roles_list:
                    role = role.strip()
                    lIndex = role.find('[')
                    if lIndex != -1:
                        rIndex = role.find(']')
                        description = role[lIndex + 1:rIndex]
                        role = (role[:lIndex].strip(), description)
                    self.release.extraartists[-1].roles.append(role)

        # Track Duration
        elif name == 'duration' and 'sub_track' not in self.stack:
            self.release.tracklist[-1].duration = self.buffer

        # Track Position
        elif name == 'position' and 'sub_track' not in self.stack:
            self.release.tracklist[-1].position = self.buffer

        # Release Master
        elif name == 'master_id':
            self.release.master_id = int(self.buffer)

        # End of Release
        elif name == 'release':
            # end of tag
            len_a = len(self.release.artistJoins)
            if len_a == 0:
                sys.stderr.writelines(
                    "Ignoring Release %s with no artist. Dictionary: %s\n" %
                    (self.release.id, self.release.__dict__))
            else:
                global releaseCounter
                releaseCounter += 1
                self.exporter.storeRelease(self.release)

                releaseCounter += 1
                if self.stop_after > 0 and releaseCounter >= self.stop_after:
                    self.endDocument()
                    if self.ignore_missing_tags and len(self.unknown_tags) > 0:
                        print 'Encountered some unknown Release tags: %s' % (
                            self.unknown_tags)
                    raise model.ParserStopError(releaseCounter)

        if self.stack[-1] == name:
            self.stack.pop()
        self.buffer = ''
Пример #5
0
    def endElement(self, name):
        self.buffer = self.buffer.strip()
        if name == 'title':
            if len(self.buffer) != 0:
                # titles we know of can appear in tracks or releases
                # print "t=%s,k=%s" % (self.buffer, self.stack)
                if self.stack[-2] == 'track':
                    self.release.tracklist[-1].title = self.buffer
                elif self.stack[-2] == 'release':
                    self.release.title = self.buffer
        elif name == 'country':
            if len(self.buffer) != 0:
                self.release.country = self.buffer
                #global countries
                #if not countries.has_key(self.buffer):
                #  countries[self.buffer] = True
        elif name == 'anv':
            if len(self.buffer) != 0:
                if self.stack[-3] == 'artists' and self.stack[-4] == 'release':
                    self.release.anv = self.buffer
                # TODO: support anv on tracks
        elif name == 'released':
            if len(self.buffer) != 0:
                self.release.released = self.buffer
        elif name == 'notes':
            if len(self.buffer) != 0:
                self.release.notes = self.buffer
        elif name == 'genre':
            if len(self.buffer) != 0:
                self.release.genres.append(self.buffer)
        elif name == 'style':
            if len(self.buffer) != 0:
                self.release.styles.append(self.buffer)
                #global styles
                #if not styles.has_key(self.buffer):
                #  styles[self.buffer] = Style(self.buffer)
        elif name == 'description':
            if len(self.buffer) != 0:
                if 'formats' in self.stack:
                    self.release.formats[-1].descriptions.append(self.buffer)
        elif name == 'data_quality':
            if len(self.buffer) != 0:
                self.release.data_quality = self.buffer
        elif name == 'name':
            if len(self.buffer) != 0:
                if 'extraartists' in self.stack:
                    if 'track' in self.stack:  # extraartist for track
                        track = self.release.tracklist[-1]
                        extr = model.Extraartist()
                        extr.name = self.buffer
                        track.extraartists.append(extr)
                    else:  # extraartists for release
                        extr = model.Extraartist()
                        extr.name = self.buffer
                        self.release.extraartists.append(extr)
                elif 'track' in self.stack and 'extraartists' not in self.stack:
                    self.release.tracklist[-1].artists.append(self.buffer)
                else:  # release artist
                    self.release.artists.append(self.buffer)
        elif name == 'join':
            if len(self.buffer) != 0:
                if 'track' in self.stack:  # extraartist
                    track = self.release.tracklist[-1]
                    aj = model.ArtistJoin()
                    #print "ext: " + str(track.extraartists)
                    #print "title: " + str(track.title)
                    #print "artists: " + str(track.artists)
                    if len(track.artists
                           ) > 0:  # fix for bug with release 2033428, track 3
                        aj.artist1 = track.artists[-1]
                        aj.join_relation = self.buffer
                        track.artistJoins.append(aj)
                else:  # main release artist
                    aj = model.ArtistJoin()
                    if len(self.release.artists) > 0:
                        aj.artist1 = self.release.artists[-1]
                    else:
                        aj.artist1 = self.release.anv
                        self.release.artists.append(self.release.anv)
                    aj.join_relation = self.buffer
                    self.release.artistJoins.append(aj)
        elif name == 'role':
            if len(self.buffer) != 0:
                #print "ROLE PRE" + str(self.buffer)
                roles_list = re.findall('([^[,]+(?:\[[^]]+])?)+',
                                        self.buffer)  # thanks to jlatour
                #print "ROLE POST" + str(self.buffer)
                for role in roles_list:
                    role = role.strip()
                    lIndex = role.find('[')
                    if lIndex != -1:
                        rIndex = role.find(']')
                        description = role[lIndex + 1:rIndex]
                        role = (role[:lIndex].strip(), description)
                    if 'track' in self.stack:
                        idx = len(self.release.tracklist) - 1
                        track = self.release.tracklist[idx]
                        if len(track.extraartists) != 0:
                            trackExtraartist = track.extraartists[-1]
                            trackExtraartist.roles.append(role)
                    else:
                        self.release.extraartists[-1].roles.append(role)
        elif name == 'duration':
            self.release.tracklist[-1].duration = self.buffer
        elif name == 'position':
            self.release.tracklist[-1].position = self.buffer
        elif name == 'master_id':
            self.release.master_id = int(self.buffer)
        elif name == 'release':
            # end of tag
            len_a = len(self.release.artists)
            if len_a == 0:
                sys.stderr.writelines(
                    "Ignoring Release %s with no artist. Dictionary: %s\n" %
                    (self.release.id, self.release.__dict__))
            else:
                if len(self.release.artists) == 1:
                    self.release.artist = self.release.artists[0]
                else:
                    for j in self.release.artistJoins:
                        self.release.artist += '%s %s ' % (j.artist1,
                                                           j.join_relation)
                    self.release.artist += self.release.artists[-1]

                global releaseCounter
                releaseCounter += 1
                self.exporter.storeRelease(self.release)

                releaseCounter += 1
                if self.stop_after > 0 and releaseCounter >= self.stop_after:
                    self.endDocument()
                    if self.ignore_missing_tags and len(self.unknown_tags) > 0:
                        print 'Encountered some unknown Release tags: %s' % (
                            self.unknown_tags)
                    raise model.ParserStopError(releaseCounter)

        if self.stack[-1] == name:
            self.stack.pop()
        self.buffer = ''
    def endElement(self, name):
        self.buffer = self.buffer.strip()

        # Release Country
        if name == 'country':
            if len(self.buffer) != 0:
                self.release.country = self.buffer

        # Release DataQuality
        elif name == 'data_quality':
            if len(self.buffer) != 0:
                self.release.data_quality = self.buffer

        # Release Date
        elif name == 'released':
            if len(self.buffer) != 0:
                self.release.released = self.buffer

        # Release Format Description
        elif name == 'description' and 'formats' in self.stack:
            if len(self.buffer) != 0:
                self.release.formats[-1].descriptions.append(self.buffer)

        # Release Notes
        elif name == 'notes':
            if len(self.buffer) != 0:
                self.release.notes = self.buffer

        # Release Genre
        elif name == 'genre':
            if len(self.buffer) != 0:
                self.release.genres.append(self.buffer)

        # Release Master
        elif name == 'master_id':
            self.release.master_id = int(self.buffer)

        # Release Style
        elif name == 'style':
            if len(self.buffer) != 0:
                self.release.styles.append(self.buffer)

        # Release Title
        elif name == 'title' and self.stack[-2] == 'release':
            if len(self.buffer) != 0:
                self.release.title = self.buffer


        # Track Duration
        elif name == 'duration' and 'sub_track' not in self.stack:
            self.release.tracklist[-1].duration = self.buffer

        # Track Position
        elif name == 'position' and 'sub_track' not in self.stack:
            self.release.tracklist[-1].position = self.buffer

        # Track Title
        elif name == 'title' and self.stack[-2] == 'track' and 'sub_track' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].title = self.buffer


        # Release Artist Anv
        elif name == 'anv' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artists[-1].anv = self.buffer

        # Release Artist Id
        elif name == 'id' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artists[-1].id = int(self.buffer)

        # Release Artist Join
        elif name == 'join' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artists[-1].join = self.buffer

        # Release Artist Name
        elif name == 'name' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artists[-1].name = self.buffer

        # Release Artist Role
        elif name == 'role' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.artists[-1].role = self.buffer


        # Track Artist Anv
        elif name == 'anv' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artists[-1].anv = self.buffer

        # Track Artist Id
        elif name == 'id' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artists[-1].id = int(self.buffer)

        # Track Artist Join
        elif name == 'join' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artists[-1].join = self.buffer

        # Track Artist Name
        elif name == 'name' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artists[-1].name = self.buffer

        # Track Artist Role
        elif name == 'role' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' not in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].artists[-1].name = self.buffer


        # Release ExtraArtist Anv
        elif name == 'anv' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].anv = self.buffer

        # Release ExtraArtist Id
        elif name == 'id' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].id = int(self.buffer)

        # Release ExtraArtist Join
        elif name == 'join' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].role = self.buffer

        # Release ExtraArtist Name
        elif name == 'name' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].name = self.buffer

        # Release ExtraArtist Role
        elif name == 'role' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].role = self.buffer

        # Release ExtraArtist Tracks
        elif name == 'tracks' and 'artist' in self.stack and 'track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.extraartists[-1].tracks = self.buffer


        # Track ExtraArtist Anv
        elif name == 'anv' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[-1].anv = self.buffer

        # Track ExtraArtist Id
        elif name == 'id' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[-1].id = int(self.buffer)

        # Track ExtraArtist Join
        elif name == 'join' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[-1].join = self.buffer

        # Track ExtraArtist Name
        elif name == 'name' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[-1].name = self.buffer

        # Track ExtraArtist Role
        elif name == 'role' and 'artist' in self.stack and 'track' in self.stack and 'sub_track' not in self.stack and 'extraartists' in self.stack:
            if len(self.buffer) != 0:
                self.release.tracklist[-1].extraartists[-1].role = self.buffer


        # Company Catno
        elif name == 'catno' and 'company' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].catno = self.buffer

        # Company Entity_type
        elif name == 'entity_type' and 'company' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].entity_type = self.buffer

        # Company Id
        elif name == 'id' and 'company' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].id = int(self.buffer)

        # Company Name
        elif name == 'name' and 'company' in self.stack:
            if len(self.buffer) != 0:
                self.release.companies[-1].name = self.buffer


        # End of Release
        elif name == 'release':
            len_a = len(self.release.artists)
            if len_a == 0:
                sys.stderr.writelines("Ignoring Release %s with no artist. Dictionary: %s\n" % (self.release.id, self.release.__dict__))
            else:
                global releaseCounter
                releaseCounter += 1
                self.exporter.storeRelease(self.release)

                releaseCounter += 1
                if self.stop_after > 0 and releaseCounter >= self.stop_after:
                    self.endDocument()
                    if self.ignore_missing_tags and len(self.unknown_tags) > 0:
                        print 'Encountered some unknown Release tags: %s' % (self.unknown_tags)
                    raise model.ParserStopError(releaseCounter)

        if self.stack[-1] == name:
            self.stack.pop()
        self.buffer = ''
    def endElement(self, name):
        self.buffer = self.buffer.strip()
        if name == 'title' and self.stack[-2] == 'master':
            if len(self.buffer) != 0:
                self.master.title = self.buffer
        elif name == 'main_release':
            if len(self.buffer) != 0:
                self.master.main_release = int(self.buffer)
        elif name == 'year':
            if len(self.buffer) != 0:
                self.master.year = int(self.buffer)
        elif name == 'notes':
            if len(self.buffer) != 0:
                self.master.notes = self.buffer
        elif name == 'genre':
            if len(self.buffer) != 0:
                self.master.genres.append(self.buffer)
        elif name == 'style':
            if len(self.buffer) != 0:
                self.master.styles.append(self.buffer)
        elif name == 'data_quality':
            if len(self.buffer) != 0:
                self.master.data_quality = self.buffer

        # Release Artist
        elif name == 'anv' and self.stack[-3] == 'artists' and self.stack[
                -4] == 'master':
            if len(self.buffer) != 0:
                self.master.artists[-1].anv = self.buffer
        elif name == 'id' and self.stack[-3] == 'artists' and self.stack[
                -4] == 'master':
            if len(self.buffer) != 0:
                self.master.artists[-1].id = int(self.buffer)
        elif name == 'join' and self.stack[-3] == 'artists' and self.stack[
                -4] == 'master':
            if len(self.buffer) != 0:
                self.master.artists[-1].join = self.buffer
        elif name == 'name' and self.stack[-3] == 'artists' and self.stack[
                -4] == 'master':
            if len(self.buffer) != 0:
                self.master.artists[-1].name = self.buffer

        elif name == 'master':
            len_a = len(self.master.artists)
            if len_a == 0:
                sys.stderr.writelines(
                    "Ignoring Master %s with no artist. Dictionary: %s\n" %
                    (self.master.id, self.master.__dict__))
            else:
                global masterCounter
                masterCounter += 1
                self.exporter.storeMaster(self.master)

                masterCounter += 1
                if self.stop_after > 0 and masterCounter >= self.stop_after:
                    self.endDocument()
                    if self.ignore_missing_tags and len(self.unknown_tags) > 0:
                        print 'Encountered some unknown Master tags: %s' % (
                            self.unknown_tags)
                    raise model.ParserStopError(masterCounter)

        if self.stack[-1] == name:
            self.stack.pop()
        self.buffer = ''