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)))
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'])
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)
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)
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)
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)
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)))
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)
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)
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)
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)
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)
def test_5(self): #incorrect ASIN url = 'http://www.amazon.com/dp/020530902x' expected = None r = parse_amazon_url(url) self.assertEqual(r, expected)
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)
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)
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)
def test_incorrect_asin_1(self): url = 'http://www.amazon.com/dp/A20530902X' expected = None r = parse_amazon_url(url) self.assertEqual(r, expected)
def test_4(self): #incorrect ASIN url = 'http://www.amazon.com/dp/A20530902X' expected = None r = parse_amazon_url(url) self.failUnlessEqual(r, expected)