def extract_linked(self, data): artists = labels = masters = [] try: artists = [{ 'artist_id': artist['id']['text'], 'name': artist['name']['text'] } for artist in collect_obj(data['discogs']['artist'])] except: pass try: labels = [{ 'label_id': label['id']['text'], 'name': label['name']['text'] } for label in collect_obj(data['discogs']['label'])] except: pass try: masters = [{ 'master_id': master['_id'], 'title': master['title']['text'] } for master in collect_obj(data['discogs']['master'])] except: pass return { u'artist': artists, u'label': labels, u'master': masters, 'version': 3 }
def map(self, data): target = base_mapping('release') target['version'] = 11 release = target['release'] try: release['title'] = collect_text(data['discogs']['release']['title']) except: pass try: release['date'] = collect_text(data['discogs']['release']['released']) except: pass try: release['country'] = [countries.get(country) for country in collect_text(data['discogs']['release']['country']) if countries.get(country, False)] except: pass try: release['artist'] = [{'name': artist['name']['text'], 'subitem': 'artist-{0}'.format(int(artist['id']['text']))} for artist in collect_obj(data['discogs']['release']['artists']['artist'])] release['combined_artist'] = comma_list([artist['name'] for artist in release['artist']]) except: pass try: release['urls'] = [{'url': image['_uri'], 'type': 'cover art'} for image in collect_obj(data['discogs']['release']['images']['image'])] except: pass try: labels = [{'name': label['_name'], 'catalog_number': label['_catno']} for label in collect_obj(data['discogs']['release']['labels']['label'])] subitem_labels = self.extract_linked(data)['label'] for label in labels: added = False for candidate in subitem_labels: if candidate['name'] == label['name']: label.update({'subitem': 'label-' + candidate['label_id']}) release['label'].append(label) added = True break if not added: release['label'].append(label) except: pass try: release['barcode'] = [re.sub(' ', '', barcode_obj['_value']) for barcode_obj in collect_obj(data['discogs']['release']['identifiers']['identifier'], {'_type': '^Barcode$'})] except: pass try: tracks = collect_obj(data['discogs']['release']['tracklist']['track']) for track in tracks: obj = {'title': collect_text(track['title'])} if 'artists' in track: obj['artist'] = [{'name': artist['name']['text'], 'subitem': 'artist-{0}'.format(int(artist['id']['text']))} for artist in collect_obj(track['artists']['artist'])] else: obj['artist'] = release['artist'] obj['length_formatted'] = collect_text(track['duration']) obj['length'] = [unformat_track_length(a) for a in collect_text(track['duration'])] obj['number'] = collect_text(track['position']) release['tracks'].append(obj) except: pass return target
def extract_linked(self, data): artists = labels = masters = [] try: artists = [{'artist_id': artist['id']['text'], 'name': artist['name']['text']} for artist in collect_obj(data['discogs']['artist'])] except: pass try: labels = [{'label_id': label['id']['text'], 'name': label['name']['text']} for label in collect_obj(data['discogs']['label'])] except: pass try: masters = [{'master_id': master['_id'], 'title': master['title']['text']} for master in collect_obj(data['discogs']['master'])] except: pass return {u'artist': artists, u'label': labels, u'master': masters, 'version': 3}
def map(self, data): target = base_mapping('release') target['version'] = 13 release = target['release'] try: release['title'] = collect_text( data['discogs']['release']['title']) except: pass try: release['date'] = collect_text( data['discogs']['release']['released']) except: pass try: release['country'] = [ countries.get(country) for country in collect_text( data['discogs']['release']['country']) if countries.get(country, False) ] except: pass try: release['artist'] = [{ 'name': artist['name']['text'], 'subitem': 'artist-{0}'.format(int(artist['id']['text'])) } for artist in collect_obj(data['discogs']['release']['artists'] ['artist'])] release['combined_artist'] = comma_list( [artist['name'] for artist in release['artist']]) except: pass try: release['urls'] = [{ 'url': image['_uri'], 'type': 'cover art' } for image in collect_obj(data['discogs']['release']['images'] ['image'])] except: pass try: release['urls'].append({ 'url': 'http://www.discogs.com/release/' + data['discogs']['release']['_id'], 'type': 'link type', 'link_type': 'discogs' }) except: pass try: labels = [{ 'name': label['_name'], 'catalog_number': label['_catno'] } for label in collect_obj(data['discogs']['release']['labels'] ['label'])] subitem_labels = self.extract_linked(data)['label'] for label in labels: added = False for candidate in subitem_labels: if candidate['name'] == label['name']: label.update( {'subitem': 'label-' + candidate['label_id']}) release['label'].append(label) added = True break if not added: release['label'].append(label) except: pass try: release['barcode'] = [ re.sub(' ', '', barcode_obj['_value']) for barcode_obj in collect_obj( data['discogs']['release']['identifiers']['identifier'], {'_type': '^Barcode$'}) ] except: pass try: tracks = collect_obj( data['discogs']['release']['tracklist']['track']) for track in tracks: obj = {'title': collect_text(track['title'])} if 'artists' in track: obj['artist'] = [{ 'name': artist['name']['text'], 'subitem': 'artist-{0}'.format(int(artist['id']['text'])) } for artist in collect_obj(track['artists']['artist'])] else: obj['artist'] = release['artist'] obj['length_formatted'] = collect_text(track['duration']) obj['length'] = [ unformat_track_length(a) for a in collect_text(track['duration']) ] obj['number'] = collect_text(track['position']) release['tracks'].append(obj) except: pass return target