Exemple #1
0
    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
        }
Exemple #2
0
    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
Exemple #3
0
    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}
Exemple #4
0
    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