Example #1
0
def _process_asin_relation(try_list, relation):
    amz = parse_amazon_url(relation.target[0].text)
    if amz is not None:
        if amz['host'] in AMAZON_SERVER:
            serverInfo = AMAZON_SERVER[amz['host']]
        else:
            serverInfo = AMAZON_SERVER['amazon.com']
        host = serverInfo['server']
        path_l = AMAZON_IMAGE_PATH % (amz['asin'], serverInfo['id'], 'L')
        path_m = AMAZON_IMAGE_PATH % (amz['asin'], serverInfo['id'], 'M')
        _try_list_append_image_url(try_list, QUrl("http://%s:%s" % (host, path_l)))
        _try_list_append_image_url(try_list, QUrl("http://%s:%s" % (host, path_m)))
Example #2
0
 def _queue_from_asin_relation(self, url):
     """Queue cover art images from Amazon"""
     amz = parse_amazon_url(url)
     if amz is None:
         return
     log.debug("Found ASIN relation : %s %s", amz['host'], amz['asin'])
     self._has_url_relation = True
     if amz['host'] in AMAZON_SERVER:
         server_info = AMAZON_SERVER[amz['host']]
     else:
         server_info = AMAZON_SERVER['amazon.com']
     self._queue_asin(server_info, amz['asin'])
Example #3
0
def _process_asin_relation(try_list, relation):
    amz = parse_amazon_url(relation.target[0].text)
    if amz is not None:
        if amz['host'] in AMAZON_SERVER:
            serverInfo = AMAZON_SERVER[amz['host']]
        else:
            serverInfo = AMAZON_SERVER['amazon.com']
        host = serverInfo['server']
        path_l = AMAZON_IMAGE_PATH % (amz['asin'], serverInfo['id'], 'L')
        path_m = AMAZON_IMAGE_PATH % (amz['asin'], serverInfo['id'], 'M')
        _try_list_append_image_url(try_list, QUrl("http://%s:%s" % (host, path_l)))
        _try_list_append_image_url(try_list, QUrl("http://%s:%s" % (host, path_m)))
Example #4
0
def _relations_to_metadata(relations, m):
    config = get_config()
    use_credited_as = not config.setting['standardize_artists']
    use_instrument_credits = not config.setting['standardize_instruments']
    for relation in relations:
        if relation['target-type'] == 'artist':
            artist = relation['artist']
            value, valuesort = _translate_artist_node(artist)
            has_translation = (value != artist['name'])
            if not has_translation and use_credited_as and 'target-credit' in relation:
                credited_as = relation['target-credit']
                if credited_as:
                    value = credited_as
            reltype = relation['type']
            attribs = []
            if 'attributes' in relation:
                attribs = [a for a in relation['attributes']]
            if reltype in {'vocal', 'instrument', 'performer'}:
                if use_instrument_credits:
                    attr_credits = relation.get('attribute-credits', {})
                else:
                    attr_credits = {}
                name = 'performer:' + _parse_attributes(
                    attribs, reltype, attr_credits)
            elif reltype == 'mix-DJ' and len(attribs) > 0:
                if not hasattr(m, "_djmix_ars"):
                    m._djmix_ars = {}
                for attr in attribs:
                    m._djmix_ars.setdefault(attr.split()[1], []).append(value)
                continue
            else:
                try:
                    name = _artist_rel_types[reltype]
                except KeyError:
                    continue
            if value not in m[name]:
                m.add(name, value)
            if name == 'composer' and valuesort not in m['composersort']:
                m.add('composersort', valuesort)
        elif relation['target-type'] == 'work':
            if relation['type'] == 'performance':
                performance_to_metadata(relation, m)
                work_to_metadata(relation['work'], m)
        elif relation['target-type'] == 'url':
            if relation['type'] == 'amazon asin' and 'asin' not in m:
                amz = parse_amazon_url(relation['url']['resource'])
                if amz is not None:
                    m['asin'] = amz['asin']
            elif relation['type'] == 'license':
                url = relation['url']['resource']
                m.add('license', url)
Example #5
0
def _relations_to_metadata(relation_lists, m):
    use_credited_as = not config.setting["standardize_artists"]
    for relation_list in relation_lists:
        if relation_list.target_type == 'artist':
            for relation in relation_list.relation:
                artist = relation.artist[0]
                value, valuesort = _translate_artist_node(artist)
                has_translation = (value != artist.name[0].text)
                if not has_translation and use_credited_as and 'target_credit' in relation.children:
                    credited_as = relation.target_credit[0].text
                    if credited_as:
                        value, valuesort = credited_as, credited_as
                reltype = relation.type
                attribs = []
                if 'attribute_list' in relation.children:
                    attribs = [
                        a.text for a in relation.attribute_list[0].attribute
                    ]
                if reltype in ('vocal', 'instrument', 'performer'):
                    name = 'performer:' + _parse_attributes(attribs, reltype)
                elif reltype == 'mix-DJ' and len(attribs) > 0:
                    if not hasattr(m, "_djmix_ars"):
                        m._djmix_ars = {}
                    for attr in attribs:
                        m._djmix_ars.setdefault(attr.split()[1],
                                                []).append(value)
                    continue
                else:
                    try:
                        name = _artist_rel_types[reltype]
                    except KeyError:
                        continue
                if value not in m[name]:
                    m.add(name, value)
                if name == 'composer' and valuesort not in m['composersort']:
                    m.add('composersort', valuesort)
        elif relation_list.target_type == 'work':
            for relation in relation_list.relation:
                if relation.type == 'performance':
                    performance_to_metadata(relation, m)
                    work_to_metadata(relation.work[0], m)
        elif relation_list.target_type == 'url':
            for relation in relation_list.relation:
                if relation.type == 'amazon asin' and 'asin' not in m:
                    amz = parse_amazon_url(relation.target[0].text)
                    if amz is not None:
                        m['asin'] = amz['asin']
                elif relation.type == 'license':
                    url = relation.target[0].text
                    m.add('license', url)
Example #6
0
def _relations_to_metadata(relations, m):
    use_credited_as = not config.setting['standardize_artists']
    use_instrument_credits = not config.setting['standardize_instruments']
    for relation in relations:
        if relation['target-type'] == 'artist':
            artist = relation['artist']
            value, valuesort = _translate_artist_node(artist)
            has_translation = (value != artist['name'])
            if not has_translation and use_credited_as and 'target-credit' in relation:
                credited_as = relation['target-credit']
                if credited_as:
                    value, valuesort = credited_as, credited_as
            reltype = relation['type']
            attribs = []
            if 'attributes' in relation:
                attribs = [a for a in relation['attributes']]
            if reltype in ('vocal', 'instrument', 'performer'):
                if use_instrument_credits:
                    attr_credits = relation.get('attribute-credits', {})
                else:
                    attr_credits = {}
                name = 'performer:' + _parse_attributes(attribs, reltype, attr_credits)
            elif reltype == 'mix-DJ' and len(attribs) > 0:
                if not hasattr(m, "_djmix_ars"):
                    m._djmix_ars = {}
                for attr in attribs:
                    m._djmix_ars.setdefault(attr.split()[1], []).append(value)
                continue
            else:
                try:
                    name = _artist_rel_types[reltype]
                except KeyError:
                    continue
            if value not in m[name]:
                m.add(name, value)
            if name == 'composer' and valuesort not in m['composersort']:
                m.add('composersort', valuesort)
        elif relation['target-type'] == 'work':
            if relation['type'] == 'performance':
                performance_to_metadata(relation, m)
                work_to_metadata(relation['work'], m)
        elif relation['target-type'] == 'url':
            if relation['type'] == 'amazon asin' and 'asin' not in m:
                amz = parse_amazon_url(relation['url']['resource'])
                if amz is not None:
                    m['asin'] = amz['asin']
            elif relation['type'] == 'license':
                url = relation['url']['resource']
                m.add('license', url)
Example #7
0
File: mbxml.py Project: JDLH/picard
def _relations_to_metadata(relation_lists, m):
    use_credited_as = not config.setting["standardize_artists"]
    for relation_list in relation_lists:
        if relation_list.target_type == 'artist':
            for relation in relation_list.relation:
                artist = relation.artist[0]
                value, valuesort = _translate_artist_node(artist)
                has_translation = (value != artist.name[0].text)
                if not has_translation and use_credited_as and 'target_credit' in relation.children:
                    credited_as = relation.target_credit[0].text
                    if credited_as:
                        value, valuesort = credited_as, credited_as
                reltype = relation.type
                attribs = []
                if 'attribute_list' in relation.children:
                    attribs = [a.text for a in relation.attribute_list[0].attribute]
                if reltype in ('vocal', 'instrument', 'performer'):
                    name = 'performer:' + _parse_attributes(attribs, reltype)
                elif reltype == 'mix-DJ' and len(attribs) > 0:
                    if not hasattr(m, "_djmix_ars"):
                        m._djmix_ars = {}
                    for attr in attribs:
                        m._djmix_ars.setdefault(attr.split()[1], []).append(value)
                    continue
                else:
                    try:
                        name = _artist_rel_types[reltype]
                    except KeyError:
                        continue
                if value not in m[name]:
                    m.add(name, value)
                if name == 'composer' and valuesort not in m['composersort']:
                    m.add('composersort', valuesort)
        elif relation_list.target_type == 'work':
            for relation in relation_list.relation:
                if relation.type == 'performance':
                    performance_to_metadata(relation, m)
                    work_to_metadata(relation.work[0], m)
        elif relation_list.target_type == 'url':
            for relation in relation_list.relation:
                if relation.type == 'amazon asin' and 'asin' not in m:
                    amz = parse_amazon_url(relation.target[0].text)
                    if amz is not None:
                        m['asin'] = amz['asin']
                elif relation.type == 'license':
                    url = relation.target[0].text
                    m.add('license', url)
Example #8
0
 def _queue_from_asin_relation(self, url):
     """Queue cover art images from Amazon"""
     amz = parse_amazon_url(url)
     if amz is None:
         return
     log.debug("Found ASIN relation : %s %s", amz['host'], amz['asin'])
     if amz['host'] in AMAZON_SERVER:
         serverInfo = AMAZON_SERVER[amz['host']]
     else:
         serverInfo = AMAZON_SERVER['amazon.com']
     host = serverInfo['server']
     for size in AMAZON_SIZES:
         path = AMAZON_IMAGE_PATH % {
             'asin': amz['asin'],
             'serverid': serverInfo['id'],
             'size': size
         }
         self.queue_put(CoverArtImage("http://%s%s" % (host, path)))
Example #9
0
 def _queue_from_asin_relation(self, url):
     """Queue cover art images from Amazon"""
     amz = parse_amazon_url(url)
     if amz is None:
         return
     log.debug("Found ASIN relation : %s %s", amz['host'], amz['asin'])
     if amz['host'] in AMAZON_SERVER:
         serverInfo = AMAZON_SERVER[amz['host']]
     else:
         serverInfo = AMAZON_SERVER['amazon.com']
     host = serverInfo['server']
     for size in AMAZON_SIZES:
         path = AMAZON_IMAGE_PATH % {
             'asin': amz['asin'],
             'serverid': serverInfo['id'],
             'size': size
         }
         self.queue_put(CoverArtImage("http://%s%s" % (host, path)))
Example #10
0
def _relations_to_metadata(relation_lists, m):
    for relation_list in relation_lists:
        if relation_list.target_type == 'artist':
            for relation in relation_list.relation:
                artist = relation.artist[0]
                value = _translate_artist_node(
                    artist)[0] or artist.name[0].text
                reltype = relation.type
                attribs = []
                if 'attribute_list' in relation.children:
                    attribs = [
                        a.text for a in relation.attribute_list[0].attribute
                    ]
                if reltype in ('vocal', 'instrument', 'performer'):
                    name = 'performer:' + _parse_attributes(attribs, reltype)
                elif reltype == 'mix-DJ' and len(attribs) > 0:
                    if not hasattr(m, "_djmix_ars"):
                        m._djmix_ars = {}
                    for attr in attribs:
                        m._djmix_ars.setdefault(attr.split()[1],
                                                []).append(value)
                    continue
                else:
                    try:
                        name = _artist_rel_types[reltype]
                    except KeyError:
                        continue
                if value not in m[name]:
                    m.add(name, value)
        elif relation_list.target_type == 'work':
            for relation in relation_list.relation:
                if relation.type == 'performance':
                    work_to_metadata(relation.work[0], m)
        elif relation_list.target_type == 'url':
            for relation in relation_list.relation:
                if relation.type == 'amazon asin' and 'asin' not in m:
                    amz = parse_amazon_url(relation.target[0].text)
                    if amz is not None:
                        m['asin'] = amz['asin']
                elif relation.type == 'license':
                    url = relation.target[0].text
                    m.add('license', url)
Example #11
0
def _relations_to_metadata(relation_lists, m):
    for relation_list in relation_lists:
        if relation_list.target_type == "artist":
            for relation in relation_list.relation:
                artist = relation.artist[0]
                value, valuesort = _translate_artist_node(artist)
                reltype = relation.type
                attribs = []
                if "attribute_list" in relation.children:
                    attribs = [a.text for a in relation.attribute_list[0].attribute]
                if reltype in ("vocal", "instrument", "performer"):
                    name = "performer:" + _parse_attributes(attribs, reltype)
                elif reltype == "mix-DJ" and len(attribs) > 0:
                    if not hasattr(m, "_djmix_ars"):
                        m._djmix_ars = {}
                    for attr in attribs:
                        m._djmix_ars.setdefault(attr.split()[1], []).append(value)
                    continue
                else:
                    try:
                        name = _artist_rel_types[reltype]
                    except KeyError:
                        continue
                if value not in m[name]:
                    m.add(name, value)
                if name == "composer" and valuesort not in m["composersort"]:
                    m.add("composersort", valuesort)
        elif relation_list.target_type == "work":
            for relation in relation_list.relation:
                if relation.type == "performance":
                    performance_to_metadata(relation, m)
                    work_to_metadata(relation.work[0], m)
        elif relation_list.target_type == "url":
            for relation in relation_list.relation:
                if relation.type == "amazon asin" and "asin" not in m:
                    amz = parse_amazon_url(relation.target[0].text)
                    if amz is not None:
                        m["asin"] = amz["asin"]
                elif relation.type == "license":
                    url = relation.target[0].text
                    m.add("license", url)
Example #12
0
def _relations_to_metadata(relation_lists, m):
    for relation_list in relation_lists:
        if relation_list.target_type == 'artist':
            for relation in relation_list.relation:
                artist = relation.artist[0]
                value = _translate_artist_node(artist)[0] or artist.name[0].text
                reltype = relation.type
                attribs = []
                if 'attribute_list' in relation.children:
                    attribs = [a.text for a in relation.attribute_list[0].attribute]
                if reltype in ('vocal', 'instrument', 'performer'):
                    name = 'performer:' + _parse_attributes(attribs, reltype)
                elif reltype == 'mix-DJ' and len(attribs) > 0:
                    if not hasattr(m, "_djmix_ars"):
                        m._djmix_ars = {}
                    for attr in attribs:
                        m._djmix_ars.setdefault(attr.split()[1], []).append(value)
                    continue
                else:
                    try:
                        name = _artist_rel_types[reltype]
                    except KeyError:
                        continue
                if value not in m[name]:
                    m.add(name, value)
        elif relation_list.target_type == 'work':
            for relation in relation_list.relation:
                if relation.type == 'performance':
                    work_to_metadata(relation.work[0], m)
        elif relation_list.target_type == 'url':
            for relation in relation_list.relation:
                if relation.type == 'amazon asin' and 'asin' not in m:
                    amz = parse_amazon_url(relation.target[0].text)
                    if amz is not None:
                        m['asin'] = amz['asin']
                elif relation.type == 'license':
                    url = relation.target[0].text
                    m.add('license', url)
Example #13
0
 def test_7(self):
     #incorrect url scheme
     url = 'httpsa://www.amazon.co.jp/gp/product/B00005FMYV'
     expected = None
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #14
0
 def test_6(self):
     url = 'https://www.amazon.co.jp/gp/product/B00005FMYV'
     expected = {'asin': 'B00005FMYV', 'host': 'amazon.co.jp'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #15
0
 def test_5(self):
     #incorrect ASIN
     url = 'http://www.amazon.com/dp/020530902x'
     expected = None
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #16
0
 def test_3(self):
     url = 'http://amazon.com/Dark-Side-Moon-Pink-Floyd/dp/B004ZN9RWK/ref=sr_1_1?s=music&ie=UTF8&qid=1372605047&sr=1-1&keywords=pink+floyd+dark+side+of+the+moon'
     expected = {'asin': 'B004ZN9RWK', 'host': 'amazon.com'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #17
0
 def test_2(self):
     url = 'http://ec1.amazon.co.jp/gp/product/020530902X'
     expected = {'asin': '020530902X', 'host': 'ec1.amazon.co.jp'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #18
0
 def test_1(self):
     url = 'http://www.amazon.com/dp/020530902X'
     expected = {'asin': '020530902X', 'host': 'amazon.com'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #19
0
 def test_2(self):
     url = 'http://ec1.amazon.co.jp/gp/product/020530902X'
     expected = {'asin': '020530902X', 'host': 'ec1.amazon.co.jp'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #20
0
 def test_5(self):
     #incorrect ASIN
     url = 'http://www.amazon.com/dp/020530902x'
     expected = None
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #21
0
 def test_6(self):
     url = 'https://www.amazon.co.jp/gp/product/B00005FMYV'
     expected = {'asin': 'B00005FMYV', 'host': 'amazon.co.jp'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #22
0
 def test_incorrect_asin_1(self):
     url = 'http://www.amazon.com/dp/A20530902X'
     expected = None
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #23
0
 def test_4(self):
     #incorrect ASIN
     url = 'http://www.amazon.com/dp/A20530902X'
     expected = None
     r = parse_amazon_url(url)
     self.failUnlessEqual(r, expected)
Example #24
0
 def test_7(self):
     #incorrect url scheme
     url = 'httpsa://www.amazon.co.jp/gp/product/B00005FMYV'
     expected = None
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #25
0
 def test_3(self):
     url = 'http://amazon.com/Dark-Side-Moon-Pink-Floyd/dp/B004ZN9RWK/ref=sr_1_1?s=music&ie=UTF8&qid=1372605047&sr=1-1&keywords=pink+floyd+dark+side+of+the+moon'
     expected = {'asin': 'B004ZN9RWK', 'host': 'amazon.com'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)
Example #26
0
 def test_1(self):
     url = 'http://www.amazon.com/dp/020530902X'
     expected = {'asin': '020530902X', 'host': 'amazon.com'}
     r = parse_amazon_url(url)
     self.assertEqual(r, expected)