Skip to content

Commit

Permalink
Rework some artistextra lookups (#864)
Browse files Browse the repository at this point in the history
  • Loading branch information
aw-was-here committed Jul 2, 2023
1 parent 027e424 commit c3f8858
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 59 deletions.
17 changes: 14 additions & 3 deletions nowplaying/artistextras/discogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,21 @@ def _find_discogs_artist_releaselist(self, metadata):
if not self.client:
return None

artistnum = 0
artistname = metadata['artist']
# 'https://www.discogs.com/artist/<ARTISTNUM>'
if metadata.get('artistwebsites'):
discogs_website = [url for url in metadata['artistwebsites'] if 'discogs' in url]
if len(discogs_website) == 1:
artistnum = discogs_website[0].split('/')[-1]
artist = self.client.artist(artistnum)
artistname = artist.name
logging.debug('Found a singular discogs artist URL using %s instead of %s',
artistname, metadata['artist'])

try:
logging.debug('Fetching %s - %s', metadata['artist'], metadata['album'])
resultlist = self.client.search(metadata['album'],
artist=metadata['artist'],
logging.debug('Fetching %s - %s', artistname, metadata['album'])
resultlist = self.client.search(metadata['album'], artist=artistname,
type='title').page(1)
except (
requests.exceptions.ReadTimeout, # pragma: no cover
Expand Down
16 changes: 8 additions & 8 deletions nowplaying/artistextras/fanarttv.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
import requests.exceptions
import urllib3.exceptions

import nowplaying.config
#import nowplaying.config
from nowplaying.artistextras import ArtistExtrasPlugin
import nowplaying.utils
#import nowplaying.utils


class Plugin(ArtistExtrasPlugin):
Expand Down Expand Up @@ -60,7 +60,7 @@ def download(self, metadata=None, imagecache=None): # pylint: disable=too-many-
if not metadata.get('musicbrainzartistid'):
return None

fnstr = nowplaying.utils.normalize(metadata['artist'])
#fnstr = nowplaying.utils.normalize(metadata['artist'])
logging.debug('got musicbrainzartistid: %s', metadata['musicbrainzartistid'])
for artistid in metadata['musicbrainzartistid']:
artistrequest = self._fetch(apikey, artistid)
Expand All @@ -69,11 +69,11 @@ def download(self, metadata=None, imagecache=None): # pylint: disable=too-many-

artist = artistrequest.json()

if artist.get('name') and nowplaying.utils.normalize(artist['name']) in fnstr:
logging.debug("fanarttv Trusting : %s", artist['name'])
else:
logging.debug("fanarttv Not trusting: %s vs %s", artist.get('name'), fnstr)
continue
# if artist.get('name') and nowplaying.utils.normalize(artist['name']) in fnstr:
# logging.debug("fanarttv Trusting : %s", artist['name'])
# else:
# logging.debug("fanarttv Not trusting: %s vs %s", artist.get('name'), fnstr)
# continue

if artist.get('musicbanner') and self.config.cparser.value('fanarttv/banners',
type=bool):
Expand Down
22 changes: 12 additions & 10 deletions nowplaying/artistextras/theaudiodb.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,15 @@ def _fetch(self, apikey, api):

def _check_artist(self, artdata):
''' is this actually the artist we are looking for? '''
found = False
for fieldname in ['strArtist', 'strArtistAlternate']:
if artdata.get(fieldname) and nowplaying.utils.normalize(
artdata[fieldname]) in self.fnstr:
logging.debug('theaudiodb Trusting %s: %s', fieldname, artdata[fieldname])
found = True
else:
logging.debug('theaudiodb not Trusting %s vs. %s', self.fnstr,
nowplaying.utils.normalize(artdata.get(fieldname)))
return found
if artdata.get(fieldname) and self.fnstr:
normalized = nowplaying.utils.normalize(artdata[fieldname])
if normalized and normalized in self.fnstr:
logging.debug('theaudiodb Trusting %s: %s', fieldname, artdata[fieldname])
return True
logging.debug('theaudiodb not Trusting %s vs. %s', self.fnstr,
nowplaying.utils.normalize(artdata.get(fieldname)))
return False

def _handle_extradata(self, extradata, metadata, imagecache): # pylint: disable=too-many-branches
''' deal with the various bits of data '''
Expand Down Expand Up @@ -145,13 +144,16 @@ def download(self, metadata=None, imagecache=None): # pylint: disable=too-many-
extradata = []
self.fnstr = nowplaying.utils.normalize(metadata['artist'])

# if musicbrainz lookup fails, then there likely isn't
# data in theaudiodb that matches.
if metadata.get('musicbrainzartistid'):
logging.debug('got musicbrainzartistid: %s', metadata['musicbrainzartistid'])
for mbid in metadata['musicbrainzartistid']:
if newdata := self.artistdatafrommbid(apikey, mbid):
extradata.extend(artist for artist in newdata['artists']
if self._check_artist(artist))
if not extradata and metadata.get('artist'):

elif metadata.get('artist'):
logging.debug('got artist')
if artistdata := self.artistdatafromname(apikey, metadata['artist']):
extradata.extend(artist for artist in artistdata.get('artists')
Expand Down
30 changes: 4 additions & 26 deletions nowplaying/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,32 +189,10 @@ def _musicbrainz(self):
return None

musicbrainz = nowplaying.musicbrainz.MusicBrainzHelper(config=self.config)
metalist = musicbrainz.providerinfo()

addmeta = {}

if self.metadata.get('musicbrainzrecordingid'):
logging.debug('musicbrainz recordingid detected; attempting shortcuts')
if any(meta not in self.metadata for meta in metalist):
addmeta = musicbrainz.recordingid(self.metadata['musicbrainzrecordingid'])
self.metadata = recognition_replacement(config=self.config,
metadata=self.metadata,
addmeta=addmeta)
elif self.metadata.get('isrc'):
logging.debug('Preprocessing with musicbrainz isrc')
if any(meta not in self.metadata for meta in metalist):
addmeta = musicbrainz.isrc(self.metadata['isrc'])
self.metadata = recognition_replacement(config=self.config,
metadata=self.metadata,
addmeta=addmeta)
elif self.metadata.get('musicbrainzartistid'):
logging.debug('Preprocessing with musicbrainz artistid')
if any(meta not in self.metadata for meta in metalist):
addmeta = musicbrainz.artistids(self.metadata['musicbrainzartistid'])
self.metadata = recognition_replacement(config=self.config,
metadata=self.metadata,
addmeta=addmeta)

addmeta = musicbrainz.recognize(self.metadata)
self.metadata = recognition_replacement(config=self.config,
metadata=self.metadata,
addmeta=addmeta)
return addmeta

def _mb_fallback(self):
Expand Down
4 changes: 3 additions & 1 deletion nowplaying/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
class WNPBasePlugin:
''' base class of plugins '''

def __init__(self, config=None, qsettings: t.Optional[QWidget] = None):
def __init__(self,
config: t.Optional['nowplaying.config.ConfigFile'] = None,
qsettings: t.Optional[QWidget] = None):
self.available: bool = True
self.plugintype: str = ''
self.config = config
Expand Down
14 changes: 3 additions & 11 deletions tests/test_artistextras.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def test_discogs_note_stripping(bootstrap): # pylint: disable=redefined-outer-n
mpproc = nowplaying.metadata.MetadataProcessors(config=config)
mpproc.metadata = data
assert 'Note:' in mpproc.metadata['artistlongbio']
mpproc._generate_short_bio() # pylint: disable=protected-access
mpproc._generate_short_bio() # pylint: disable=protected-access
assert 'Note:' not in mpproc.metadata['artistshortbio']


Expand Down Expand Up @@ -203,16 +203,8 @@ def test_badmbid(getconfiguredplugin): # pylint: disable=redefined-outer-name
'musicbrainzartistid': ['xyz']
},
imagecache=imagecaches[pluginname])
if pluginname == 'theaudiodb':
assert data['artistfanarturls']
assert data['artistlongbio']
assert data['artistwebsites']
assert imagecaches[pluginname].urls['Nine Inch Nails']['artistbanner']
assert imagecaches[pluginname].urls['Nine Inch Nails']['artistlogo']
assert imagecaches[pluginname].urls['Nine Inch Nails']['artistthumb']
else:
assert not data
assert not imagecaches[pluginname].urls
assert not data
assert not imagecaches[pluginname].urls


def test_onlymbid(getconfiguredplugin): # pylint: disable=redefined-outer-name
Expand Down

0 comments on commit c3f8858

Please sign in to comment.