mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-05 04:53:01 +00:00
add a get_normal_artist_name function to try and normalize artist name variations
- add a get_artist_lists function to group artist name variants into a list
- add a get_normalized_artists function to return normalized artist objects
- use the above functions in:
- searching artists
- album artists
- playlist artists
This commit is contained in:
+7
-12
@@ -97,22 +97,17 @@ def get_album_bio():
|
|||||||
|
|
||||||
@album_bp.route("/album/artists", methods=["POST"])
|
@album_bp.route("/album/artists", methods=["POST"])
|
||||||
def get_albumartists():
|
def get_albumartists():
|
||||||
"""Returns a list of artists featured in a given album."""
|
"""
|
||||||
data = request.get_json()
|
Returns a list of artists featured in a given album.
|
||||||
|
"""
|
||||||
|
|
||||||
|
data = request.get_json()
|
||||||
albumhash = data["hash"]
|
albumhash = data["hash"]
|
||||||
|
|
||||||
tracks = instances.tracks_instance.find_tracks_by_hash(albumhash)
|
tracks = instances.tracks_instance.find_tracks_by_hash(albumhash)
|
||||||
tracks = [models.Track(t) for t in tracks]
|
tracks = [models.Track(t) for t in tracks]
|
||||||
|
|
||||||
artists = []
|
artists = [a for t in tracks for a in t.artists]
|
||||||
|
artists = helpers.get_normalized_artists(artists)
|
||||||
|
|
||||||
for track in tracks:
|
return {"artists": artists}
|
||||||
for artist in track.artists:
|
|
||||||
artist = artist.lower()
|
|
||||||
if artist not in artists:
|
|
||||||
artists.append(artist)
|
|
||||||
|
|
||||||
final_artists = [models.Artist(a) for a in artists]
|
|
||||||
|
|
||||||
return {"artists": final_artists}
|
|
||||||
|
|||||||
@@ -180,3 +180,47 @@ class Ping:
|
|||||||
return True
|
return True
|
||||||
except (requests.exceptions.ConnectionError, requests.Timeout):
|
except (requests.exceptions.ConnectionError, requests.Timeout):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def get_normal_artist_name(artists: List[str]) -> str:
|
||||||
|
"""
|
||||||
|
Returns the artist name with most capital letters.
|
||||||
|
"""
|
||||||
|
if len(artists) == 1:
|
||||||
|
return artists[0]
|
||||||
|
|
||||||
|
artists.sort()
|
||||||
|
return artists[0]
|
||||||
|
|
||||||
|
|
||||||
|
def get_artist_lists(artists: List[str]) -> List[str]:
|
||||||
|
"""
|
||||||
|
Takes in a list of artists and returns a list of lists of an artist's various name variations.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> get_artist_lists(['Juice WRLD', 'Juice Wrld', 'XXXtentacion', 'XXXTENTACION'])
|
||||||
|
|
||||||
|
>>> [['Juice WRLD', 'Juice Wrld'], ['XXXtentacion', 'XXXTENTACION']]
|
||||||
|
"""
|
||||||
|
artist_lists: List[List[str]] = []
|
||||||
|
|
||||||
|
for artist in artists:
|
||||||
|
for list in artist_lists:
|
||||||
|
if artist.lower() == list[0].lower():
|
||||||
|
list.append(artist)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
artist_lists.append([artist])
|
||||||
|
|
||||||
|
return artist_lists
|
||||||
|
|
||||||
|
|
||||||
|
def get_normalized_artists(names: List[str]) -> List[models.Artist]:
|
||||||
|
"""
|
||||||
|
Takes in a list of artists and returns a list of models.Artist objects with normalized names.
|
||||||
|
"""
|
||||||
|
names = [n.strip() for n in names]
|
||||||
|
names = get_artist_lists(names)
|
||||||
|
names = [get_normal_artist_name(a) for a in names]
|
||||||
|
|
||||||
|
return [models.Artist(a) for a in names]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from app import exceptions
|
|||||||
from app import instances
|
from app import instances
|
||||||
from app import models
|
from app import models
|
||||||
from app import settings
|
from app import settings
|
||||||
from app.helpers import Get
|
from app.helpers import Get, get_normalized_artists
|
||||||
from app.lib import trackslib
|
from app.lib import trackslib
|
||||||
from app.logger import get_logger
|
from app.logger import get_logger
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
@@ -153,8 +153,5 @@ class GetPlaylistArtists:
|
|||||||
def __call__(self):
|
def __call__(self):
|
||||||
artists = set()
|
artists = set()
|
||||||
|
|
||||||
for t in self.tracks:
|
artists = [a for t in self.tracks for a in t.artists]
|
||||||
for a in t.artists:
|
return get_normalized_artists(artists)
|
||||||
artists.add(a)
|
|
||||||
|
|
||||||
return [models.Artist(a) for a in artists]
|
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ class Limit:
|
|||||||
|
|
||||||
|
|
||||||
class SearchTracks:
|
class SearchTracks:
|
||||||
|
|
||||||
def __init__(self, tracks: List[models.Track], query: str) -> None:
|
def __init__(self, tracks: List[models.Track], query: str) -> None:
|
||||||
self.query = query
|
self.query = query
|
||||||
self.tracks = tracks
|
self.tracks = tracks
|
||||||
@@ -60,7 +59,6 @@ class SearchTracks:
|
|||||||
|
|
||||||
|
|
||||||
class SearchArtists:
|
class SearchArtists:
|
||||||
|
|
||||||
def __init__(self, artists: set[str], query: str) -> None:
|
def __init__(self, artists: set[str], query: str) -> None:
|
||||||
self.query = query
|
self.query = query
|
||||||
self.artists = artists
|
self.artists = artists
|
||||||
@@ -78,19 +76,11 @@ class SearchArtists:
|
|||||||
limit=Limit.artists,
|
limit=Limit.artists,
|
||||||
)
|
)
|
||||||
|
|
||||||
f_artists = []
|
artists = [a[0] for a in results]
|
||||||
for artist in results:
|
return helpers.get_normalized_artists(artists)
|
||||||
aa = {
|
|
||||||
"name": artist[0],
|
|
||||||
"image": helpers.create_safe_name(artist[0]) + ".webp",
|
|
||||||
}
|
|
||||||
f_artists.append(aa)
|
|
||||||
|
|
||||||
return f_artists
|
|
||||||
|
|
||||||
|
|
||||||
class SearchAlbums:
|
class SearchAlbums:
|
||||||
|
|
||||||
def __init__(self, albums: List[models.Album], query: str) -> None:
|
def __init__(self, albums: List[models.Album], query: str) -> None:
|
||||||
self.query = query
|
self.query = query
|
||||||
self.albums = albums
|
self.albums = albums
|
||||||
@@ -121,7 +111,6 @@ class SearchAlbums:
|
|||||||
|
|
||||||
|
|
||||||
class SearchPlaylists:
|
class SearchPlaylists:
|
||||||
|
|
||||||
def __init__(self, playlists: List[models.Playlist], query: str) -> None:
|
def __init__(self, playlists: List[models.Playlist], query: str) -> None:
|
||||||
self.playlists = playlists
|
self.playlists = playlists
|
||||||
self.query = query
|
self.query = query
|
||||||
|
|||||||
Reference in New Issue
Block a user