mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-04 04:23: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"])
|
||||
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"]
|
||||
|
||||
tracks = instances.tracks_instance.find_tracks_by_hash(albumhash)
|
||||
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:
|
||||
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}
|
||||
return {"artists": artists}
|
||||
|
||||
@@ -180,3 +180,47 @@ class Ping:
|
||||
return True
|
||||
except (requests.exceptions.ConnectionError, requests.Timeout):
|
||||
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 models
|
||||
from app import settings
|
||||
from app.helpers import Get
|
||||
from app.helpers import Get, get_normalized_artists
|
||||
from app.lib import trackslib
|
||||
from app.logger import get_logger
|
||||
from PIL import Image
|
||||
@@ -153,8 +153,5 @@ class GetPlaylistArtists:
|
||||
def __call__(self):
|
||||
artists = set()
|
||||
|
||||
for t in self.tracks:
|
||||
for a in t.artists:
|
||||
artists.add(a)
|
||||
|
||||
return [models.Artist(a) for a in artists]
|
||||
artists = [a for t in self.tracks for a in t.artists]
|
||||
return get_normalized_artists(artists)
|
||||
|
||||
@@ -37,7 +37,6 @@ class Limit:
|
||||
|
||||
|
||||
class SearchTracks:
|
||||
|
||||
def __init__(self, tracks: List[models.Track], query: str) -> None:
|
||||
self.query = query
|
||||
self.tracks = tracks
|
||||
@@ -60,7 +59,6 @@ class SearchTracks:
|
||||
|
||||
|
||||
class SearchArtists:
|
||||
|
||||
def __init__(self, artists: set[str], query: str) -> None:
|
||||
self.query = query
|
||||
self.artists = artists
|
||||
@@ -78,19 +76,11 @@ class SearchArtists:
|
||||
limit=Limit.artists,
|
||||
)
|
||||
|
||||
f_artists = []
|
||||
for artist in results:
|
||||
aa = {
|
||||
"name": artist[0],
|
||||
"image": helpers.create_safe_name(artist[0]) + ".webp",
|
||||
}
|
||||
f_artists.append(aa)
|
||||
|
||||
return f_artists
|
||||
artists = [a[0] for a in results]
|
||||
return helpers.get_normalized_artists(artists)
|
||||
|
||||
|
||||
class SearchAlbums:
|
||||
|
||||
def __init__(self, albums: List[models.Album], query: str) -> None:
|
||||
self.query = query
|
||||
self.albums = albums
|
||||
@@ -121,7 +111,6 @@ class SearchAlbums:
|
||||
|
||||
|
||||
class SearchPlaylists:
|
||||
|
||||
def __init__(self, playlists: List[models.Playlist], query: str) -> None:
|
||||
self.playlists = playlists
|
||||
self.query = query
|
||||
|
||||
Reference in New Issue
Block a user