mirror of
https://github.com/tcsenpai/swingmusic.git
synced 2025-07-07 18:20:24 +00:00
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from app.models.lastfm import SimilarArtist
|
|
|
|
from ..utils import SQLiteManager
|
|
|
|
|
|
class SQLiteLastFMSimilarArtists:
|
|
"""
|
|
This class contains methods for interacting with the lastfm_similar_artists table.
|
|
"""
|
|
|
|
@classmethod
|
|
def insert_one(cls, artist: SimilarArtist):
|
|
"""
|
|
Inserts a single artist into the database.
|
|
"""
|
|
sql = """INSERT OR REPLACE INTO lastfm_similar_artists(artisthash, similar_artists) VALUES(?,?)"""
|
|
|
|
with SQLiteManager(userdata_db=True) as cur:
|
|
cur.execute(sql, (artist.artisthash, artist.similar_artist_hashes))
|
|
cur.close()
|
|
|
|
@classmethod
|
|
def get_similar_artists_for(cls, artisthash: str):
|
|
"""
|
|
Returns a list of similar artists.
|
|
"""
|
|
sql = """SELECT * FROM lastfm_similar_artists WHERE artisthash = ?"""
|
|
with SQLiteManager(userdata_db=True) as cur:
|
|
cur.execute(sql, (artisthash,))
|
|
similar_artists = cur.fetchone()
|
|
cur.close()
|
|
|
|
if similar_artists is None:
|
|
return None
|
|
|
|
return SimilarArtist(artisthash, similar_artists[2])
|
|
|
|
@classmethod
|
|
def get_all(cls):
|
|
"""
|
|
Returns a list of all similar artists.
|
|
"""
|
|
sql = """SELECT * FROM lastfm_similar_artists"""
|
|
with SQLiteManager(userdata_db=True) as cur:
|
|
cur.execute(sql)
|
|
similar_artists = cur.fetchall()
|
|
cur.close()
|
|
|
|
for a in similar_artists:
|
|
yield SimilarArtist(a[1], a[2])
|
|
|
|
@classmethod
|
|
def exists(cls, artisthash: str):
|
|
"""
|
|
Checks if an artist exists in the database by counting the number of rows
|
|
"""
|
|
sql = """SELECT COUNT(*) FROM lastfm_similar_artists WHERE artisthash = ?"""
|
|
with SQLiteManager(userdata_db=True) as cur:
|
|
cur.execute(sql, (artisthash,))
|
|
count = cur.fetchone()[0]
|
|
cur.close()
|
|
return count > 0
|