summaryrefslogtreecommitdiff
path: root/models/artist.py
diff options
context:
space:
mode:
Diffstat (limited to 'models/artist.py')
-rw-r--r--models/artist.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/models/artist.py b/models/artist.py
new file mode 100644
index 0000000..eaae27e
--- /dev/null
+++ b/models/artist.py
@@ -0,0 +1,115 @@
+from common import utils
+from db.db_manager import DbManager
+
+
+class Artist:
+ def __init__(self, id=None, **kwargs):
+ if id is not None:
+ db = DbManager()
+ for row in db.execute("""SELECT * FROM artist WHERE id = ?""",
+ (id,)):
+ setattr(self, "id", id)
+ setattr(self, "name", row[1])
+ setattr(self, "sortname", row[2])
+ setattr(self, "musicbrainz_artistid", row[3])
+ else:
+ for (key, value) in kwargs.items():
+ setattr(self, key, value)
+
+ def delete(self):
+ db = DbManager()
+
+ for album in self.albums:
+ album.delete()
+
+ delete_sql = "DELETE FROM artist WHERE id = ?"
+ db.execute(delete_sql, (self.id,))
+
+ delete_track_rel_sql = "DELETE FROM artist_track WHERE artist_id = ?"
+ db.execute(delete_track_rel_sql, (self.id,))
+
+ delete_album_rel_sql = "DELETE FROM album_artist WHERE artist_id = ?"
+ db.execute(delete_album_rel_sql, (self.id,))
+
+ db.commit()
+
+ return True
+
+ @property
+ def tracks(self):
+ from models.track import Track
+
+ if not hasattr(self, "_tracks"):
+ setattr(self, "_tracks", [])
+
+ db = DbManager()
+
+ for row in db.execute("""SELECT track.* FROM track
+ INNER JOIN artist_track ON track.id =
+ artist_track.track_id WHERE artist_id = ?
+ ORDER BY name ASC""", (self.id,)):
+
+ track = Track(id=row[0], tracknumber=row[1], name=row[2],
+ grouping=row[3], filename=row[4])
+ self._tracks.append(track)
+
+ return self._tracks
+
+ @property
+ def albums(self):
+ from models.album import Album
+
+ if not hasattr(self, "_albums"):
+ setattr(self, "_albums", [])
+
+ db = DbManager()
+
+ for row in db.execute("""SELECT album.* FROM album
+ INNER JOIN album_artist ON album.id =
+ album_artist.album_id WHERE artist_id = ?
+ ORDER BY date ASC""", (self.id,)):
+ album = Album(id=row[0], name=row[1], date=row[2])
+ self._albums.append(album)
+
+ return self._albums
+
+ def save(self):
+ dirty_attributes = {}
+
+ # check if the internal dict has been modified
+ for (attr, value) in self.__dict__.items():
+ if self.__data[attr] != getattr(self, attr):
+ dirty_attributes[attr] = value
+
+ if len(dirty_attributes) > 0:
+ db = DbManager()
+
+ set_clause = utils.update_clause_from_dict(dirty_attributes)
+
+ dirty_attributes[id] = self.id
+
+ sql = " ".join(("UPDATE artist"), set_clause, "WHERE id = :id")
+ db.execute(sql, dirty_attributes)
+ db.commit()
+
+ def search(**search_params):
+ artists = []
+
+ db = DbManager()
+
+ where_clause = utils.make_where_clause(search_params)
+
+ result = []
+ if where_clause:
+ statement = " ".join(("SELECT * FROM artist", where_clause))
+ result = db.execute(statement, search_params)
+ else:
+ result = db.execute("SELECT * FROM artist")
+
+ for row in result:
+ artists.append(
+ Artist(id=row[0], name=row[1], sortname=row[2],
+ musicbrainz_artistid=row[3])
+ )
+
+ return artists